@andrewxhill/graphics-press-css 4.2.1 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,7 +10,7 @@ A typographic and data-visualization CSS library derived from the books of Edwar
10
10
  - **Sidenotes & margin notes** -- CSS-only, no JavaScript required
11
11
  - **Data visualization components** -- dot charts, dumbbell charts, sparklines, bullet graphs, heat tables, slopegraphs, parallel coordinates, and more
12
12
  - **Narrative map framing** -- reusable slippy-map container, inset legend panel, and map annotation chrome for MapLibre/Leaflet examples
13
- - **Analytical briefing blocks** -- strategy headers, metric strips, tab rows, analytic cards, timelines, and algorithm panels for research apps
13
+ - **Analytical briefing blocks** -- strategy headers, metric strips, tab rows, analytic cards, timelines, algorithm panels, and app-shell primitives for research apps
14
14
  - **Dark mode** -- automatic via `prefers-color-scheme`, manual via `.dark` class
15
15
  - **Responsive** -- fluid typography, mobile sidenote toggles, adaptive chart layouts
16
16
  - **Print styles** -- optimized for paper output
@@ -22,7 +22,7 @@ A typographic and data-visualization CSS library derived from the books of Edwar
22
22
  ### CDN
23
23
 
24
24
  ```html
25
- <link rel="stylesheet" href="https://unpkg.com/@andrewxhill/graphics-press-css@4.2.1/css/graphics-press.css">
25
+ <link rel="stylesheet" href="https://unpkg.com/@andrewxhill/graphics-press-css@4.3.0/css/graphics-press.css">
26
26
  ```
27
27
 
28
28
  ### npm
@@ -58,7 +58,7 @@ module.exports = {
58
58
  <head>
59
59
  <meta charset="UTF-8">
60
60
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
61
- <link rel="stylesheet" href="https://unpkg.com/@andrewxhill/graphics-press-css@4.2.1/css/graphics-press.css">
61
+ <link rel="stylesheet" href="https://unpkg.com/@andrewxhill/graphics-press-css@4.3.0/css/graphics-press.css">
62
62
  </head>
63
63
  <body>
64
64
  <article>
@@ -97,6 +97,7 @@ module.exports = {
97
97
  | Parallel coords | `.parallel-coords` | Multi-variable SVG |
98
98
  | Slippy map | `.gp-map-block`, `.gp-map-frame`, `.gp-map-panel` | Narrative map embed with overlay panel and key |
99
99
  | Strategy brief | `.brief-backlink`, `.brief-header`, `.metric-strip`, `.tab-nav--filled`, `.analytic-grid`, `.activity-timeline` | Analytical dashboard framing for research and trading apps |
100
+ | App UI | `.gp-app-shell`, `.gp-toolbar`, `.gp-btn`, `.gp-input`, `.gp-panel`, `.gp-kpi-grid`, `.gp-data-table`, `.gp-card-grid`, `.gp-progress` | Tufte-compatible operational UI layer for analytics apps |
100
101
  | Bar chart | `.bar-chart` | Minimal tick or filled bars |
101
102
  | Pull stat | `.pull-stat` | Large featured numbers |
102
103
  | Stat grid | `.stat-grid` | Multiple metrics under one rule |
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Graphics Press CSS v4.2.1
2
+ * Graphics Press CSS v4.3.0
3
3
  * ─────────────────────────────────────────────────────────────────────────────
4
4
  * A typographic and data-visualization CSS library derived from the books
5
5
  * of Edward Tufte, the cartographic color principles of Eduard Imhof, and
@@ -747,6 +747,134 @@
747
747
  .activity-timeline__span.ochre { background: var(--gp-ochre); }
748
748
  .activity-timeline__value { color: var(--gp-ghost-ink); font-size: 0.74rem; white-space: nowrap; }
749
749
 
750
+ /* Application shell / analytics UI coverage */
751
+ .gp-app-shell { min-height: 100dvh; display: flex; flex-direction: column; background: var(--gp-paper); color: var(--gp-ink); }
752
+ .gp-app-header { position: sticky; top: 0; z-index: 50; border-bottom: 0.5px solid var(--gp-light-rule); background: oklch(from var(--gp-paper) l c h / 0.94); backdrop-filter: blur(16px); }
753
+ .gp-app-header__inner,
754
+ .gp-app-main,
755
+ .gp-app-footer__inner { width: min(100%, 100rem); margin: 0 auto; padding-left: 1.5rem; padding-right: 1.5rem; }
756
+ .gp-app-header__inner { min-height: 4rem; display: flex; align-items: center; justify-content: space-between; gap: 1rem; }
757
+ .gp-app-brand { display: flex; align-items: center; gap: 0.75rem; min-width: 0; font-family: var(--gp-sans); }
758
+ .gp-app-brand__mark { width: 1.7rem; height: 1.7rem; color: var(--gp-ink); flex: 0 0 auto; }
759
+ .gp-app-brand__title { font-size: 1rem; letter-spacing: -0.02em; color: var(--gp-ink); font-weight: 600; white-space: nowrap; }
760
+ .gp-app-brand__meta { font-size: 0.75rem; color: var(--gp-ghost-ink); white-space: nowrap; }
761
+ .gp-app-status { display: inline-flex; align-items: center; gap: 0.4rem; font-family: var(--gp-sans); font-size: 0.78rem; color: var(--gp-margin-ink); white-space: nowrap; }
762
+ .gp-app-status::before { content: ""; width: 0.42rem; height: 0.42rem; border-radius: 999px; background: #79d8b9; box-shadow: 0 0 0 0.2rem oklch(82% 0.06 165 / 0.22); }
763
+ .gp-app-main { flex: 1; width: min(100%, 100rem); padding-top: 1.35rem; padding-bottom: 1.5rem; }
764
+ .gp-app-frame { border-top: 0.5px solid var(--gp-light-rule); padding-top: 1rem; }
765
+ .gp-app-footer { margin-top: auto; border-top: 0.5px solid var(--gp-light-rule); }
766
+ .gp-app-footer__inner { min-height: 2.85rem; display: flex; align-items: center; justify-content: space-between; gap: 1rem; font-family: var(--gp-sans); font-size: 0.76rem; color: var(--gp-margin-ink); }
767
+
768
+ .gp-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 0.7rem; margin: 0.9rem 0 1rem; }
769
+ .gp-toolbar__group { display: inline-flex; align-items: center; flex-wrap: wrap; gap: 0.4rem; }
770
+ .gp-toolbar__meta { margin-left: auto; display: inline-flex; align-items: center; gap: 1rem; font-family: var(--gp-sans); font-size: 0.8rem; color: var(--gp-margin-ink); }
771
+
772
+ .gp-btn, .gp-segmented button, .gp-chip {
773
+ display: inline-flex; align-items: center; justify-content: center; gap: 0.4rem;
774
+ min-height: 2.15rem; padding: 0.45rem 0.85rem;
775
+ border: 0.5px solid var(--gp-light-rule);
776
+ background: transparent; color: var(--gp-margin-ink);
777
+ font-family: var(--gp-sans); font-size: 0.8rem; font-weight: 500;
778
+ letter-spacing: 0.01em; text-decoration: none; cursor: pointer;
779
+ transition: color 0.16s, background-color 0.16s, border-color 0.16s, box-shadow 0.16s;
780
+ }
781
+ .gp-btn:hover, .gp-segmented button:hover, .gp-chip:hover { color: var(--gp-ink); border-color: var(--gp-rule); background: oklch(from var(--gp-paper) calc(l - 0.02) c h); }
782
+ .gp-btn:disabled, .gp-segmented button:disabled, .gp-chip:disabled { opacity: 0.45; cursor: default; }
783
+ .gp-btn--primary, .gp-segmented .is-active { background: var(--gp-ink); border-color: var(--gp-ink); color: var(--gp-paper); }
784
+ .gp-btn--primary:hover, .gp-segmented .is-active:hover { background: oklch(from var(--gp-ink) calc(l + 0.06) c h); border-color: oklch(from var(--gp-ink) calc(l + 0.06) c h); color: var(--gp-paper); }
785
+ .gp-btn--soft { background: oklch(from var(--gp-paper) calc(l - 0.02) c h); }
786
+ .gp-btn--sm, .gp-chip { min-height: 1.95rem; padding: 0.3rem 0.7rem; font-size: 0.78rem; }
787
+ .gp-btn--pill, .gp-chip, .gp-segmented button { border-radius: 999px; }
788
+ .gp-segmented { display: inline-flex; align-items: center; flex-wrap: wrap; gap: 0.35rem; }
789
+
790
+ .gp-input {
791
+ min-height: 2.2rem; min-width: min(18rem, 100%);
792
+ padding: 0.48rem 0.8rem; border: 0.5px solid var(--gp-light-rule);
793
+ background: oklch(from var(--gp-paper) calc(l - 0.01) c h);
794
+ color: var(--gp-ink); font-family: var(--gp-sans); font-size: 0.86rem;
795
+ outline: none; transition: border-color 0.16s, box-shadow 0.16s, background-color 0.16s;
796
+ }
797
+ .gp-input::placeholder { color: var(--gp-ghost-ink); }
798
+ .gp-input:focus { border-color: var(--gp-rule); box-shadow: 0 0 0 3px oklch(from var(--gp-blue) l c h / 0.08); }
799
+
800
+ .gp-badge {
801
+ display: inline-flex; align-items: center; gap: 0.35rem;
802
+ padding: 0.18rem 0.5rem; border: 0.5px solid var(--gp-light-rule);
803
+ font-family: var(--gp-sans); font-size: 0.68rem; font-weight: 600;
804
+ letter-spacing: 0.06em; text-transform: uppercase; color: var(--gp-margin-ink);
805
+ background: oklch(from var(--gp-paper) calc(l - 0.02) c h);
806
+ }
807
+ .gp-badge::before { content: ""; width: 0.38rem; height: 0.38rem; border-radius: 999px; background: currentColor; opacity: 0.55; }
808
+ .gp-badge--live { color: var(--gp-green); background: oklch(from var(--gp-green) 95% 0.03 h / 0.22); border-color: oklch(from var(--gp-green) 86% 0.03 h / 0.42); }
809
+ .gp-badge--venue-blue { color: var(--gp-blue); }
810
+ .gp-badge--venue-red { color: var(--gp-red); }
811
+ .gp-badge--venue-ochre { color: var(--gp-ochre); }
812
+ .gp-badge--quiet::before { display: none; }
813
+
814
+ .gp-panel { border: 0.5px solid var(--gp-light-rule); background: oklch(from var(--gp-paper) calc(l - 0.006) c h); }
815
+ .gp-panel__header { display: flex; align-items: center; justify-content: space-between; gap: 0.8rem; padding: 0.9rem 1rem; border-bottom: 0.5px solid var(--gp-light-rule); }
816
+ .gp-panel__title { margin: 0; max-width: none; font-size: 0.98rem; line-height: 1.2; font-style: normal; font-family: var(--gp-sans); color: var(--gp-ink); }
817
+ .gp-panel__meta { font-family: var(--gp-sans); font-size: 0.8rem; color: var(--gp-margin-ink); }
818
+ .gp-panel__body { padding: 1rem; }
819
+ .gp-panel__body > :first-child { margin-top: 0; }
820
+ .gp-panel__body > :last-child { margin-bottom: 0; }
821
+
822
+ .gp-kpi-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr)); gap: 0.75rem; margin: 0 0 1rem; }
823
+ .gp-kpi { border: 0.5px solid var(--gp-light-rule); background: oklch(from var(--gp-paper) calc(l - 0.008) c h); padding: 0.8rem 0.9rem; }
824
+ .gp-kpi__label { display: block; font-family: var(--gp-sans); font-size: 0.74rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--gp-ghost-ink); }
825
+ .gp-kpi__value { display: block; margin-top: 0.25rem; font-family: var(--gp-sans); font-size: 1.25rem; line-height: 1.05; color: var(--gp-ink); font-weight: 600; font-variant-numeric: lining-nums tabular-nums; }
826
+ .gp-kpi__sub { display: block; margin-top: 0.2rem; font-family: var(--gp-sans); font-size: 0.8rem; color: var(--gp-margin-ink); }
827
+ .gp-kpi__value.red { color: var(--gp-red); }
828
+ .gp-kpi__value.green { color: var(--gp-green); }
829
+ .gp-kpi__value.blue { color: var(--gp-blue); }
830
+
831
+ .gp-data-table { width: 100%; max-width: none; margin: 0; font-size: 0.86rem; line-height: 1.5; }
832
+ .gp-data-table thead { border-top: 0; border-bottom: 0.5px solid var(--gp-light-rule); }
833
+ .gp-data-table thead th { font-size: 0.76rem; color: var(--gp-ghost-ink); letter-spacing: 0.08em; }
834
+ .gp-data-table tbody tr:last-child td { border-bottom: 0; padding-bottom: var(--gp-space-xs); }
835
+ .gp-data-table tbody tr + tr td { border-top: 0.5px solid oklch(from var(--gp-light-rule) l c h / 0.5); }
836
+ .gp-data-table tbody tr:hover td { background: oklch(from var(--gp-paper) calc(l - 0.02) c h); }
837
+ .gp-data-table td { padding-top: 0.55rem; padding-bottom: 0.55rem; }
838
+ .gp-data-table__wrap { overflow: auto; }
839
+ .gp-data-table__wrap.sticky-head thead th { position: sticky; top: 0; z-index: 1; background: oklch(from var(--gp-paper) calc(l - 0.005) c h); }
840
+
841
+ .gp-card-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr)); gap: 0.9rem; }
842
+ .gp-card {
843
+ border: 0.5px solid var(--gp-light-rule);
844
+ background: oklch(from var(--gp-paper) calc(l - 0.007) c h);
845
+ padding: 1rem;
846
+ }
847
+ .gp-card__eyebrow { display: block; font-family: var(--gp-sans); font-size: 0.74rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--gp-ghost-ink); }
848
+ .gp-card__title { margin: 0.2rem 0 0; max-width: none; font-family: var(--gp-sans); font-size: 1rem; line-height: 1.25; color: var(--gp-ink); }
849
+ .gp-card__meta { margin-top: 0.45rem; font-family: var(--gp-sans); font-size: 0.82rem; color: var(--gp-margin-ink); }
850
+
851
+ .gp-progress { position: relative; width: 100%; height: 0.4rem; overflow: hidden; background: oklch(from var(--gp-paper) calc(l - 0.05) c h); }
852
+ .gp-progress__bar { width: var(--gp-progress, 0%); height: 100%; background: var(--gp-ink); }
853
+
854
+ .gp-legend { display: flex; flex-wrap: wrap; align-items: center; gap: 0.7rem 1rem; font-family: var(--gp-sans); font-size: 0.78rem; color: var(--gp-margin-ink); }
855
+ .gp-legend__item { display: inline-flex; align-items: center; gap: 0.4rem; }
856
+ .gp-legend__swatch { width: 0.62rem; height: 0.62rem; border-radius: 999px; flex: 0 0 auto; background: var(--gp-ghost-ink); }
857
+
858
+ .gp-note { font-family: var(--gp-sans); font-size: 0.82rem; color: var(--gp-margin-ink); line-height: 1.55; }
859
+
860
+ .gp-link-list { display: grid; gap: 0.5rem; }
861
+ .gp-link-card {
862
+ display: flex; align-items: center; gap: 0.75rem; width: 100%;
863
+ padding: 0.95rem 1rem; border: 0.5px solid var(--gp-light-rule);
864
+ background: oklch(from var(--gp-paper) calc(l - 0.005) c h); color: inherit; text-decoration: none;
865
+ transition: background-color 0.16s, border-color 0.16s, color 0.16s;
866
+ }
867
+ .gp-link-card:hover { background: oklch(from var(--gp-paper) calc(l - 0.018) c h); border-color: var(--gp-rule); color: inherit; }
868
+ .gp-link-card__marker { width: 0.72rem; height: 0.72rem; border-radius: 999px; flex: 0 0 auto; opacity: 0.9; }
869
+ .gp-link-card__title { font-family: var(--gp-sans); font-size: 0.92rem; color: var(--gp-ink); }
870
+ .gp-link-card__meta { font-family: var(--gp-sans); font-size: 0.75rem; color: var(--gp-margin-ink); }
871
+ .gp-link-card__trail { margin-left: auto; font-family: var(--gp-sans); font-size: 0.72rem; color: var(--gp-ghost-ink); }
872
+
873
+ .gp-state { display: flex; align-items: center; justify-content: center; gap: 0.8rem; min-height: 16rem; font-family: var(--gp-sans); font-size: 0.9rem; color: var(--gp-margin-ink); }
874
+ .gp-state--compact { min-height: 8rem; }
875
+ .gp-spinner { width: 1.6rem; height: 1.6rem; border-radius: 999px; border: 2px solid oklch(from var(--gp-ink) l c h / 0.14); border-top-color: var(--gp-ink); animation: gp-spin 0.85s linear infinite; }
876
+ @keyframes gp-spin { to { transform: rotate(360deg); } }
877
+
750
878
  /* ── Minimal bar chart ────────────────────────────────────────────────── */
751
879
 
752
880
  .bar-chart { list-style: none; padding: 0; margin: var(--gp-space-lg) 0; max-width: var(--gp-text-width); }
@@ -1 +1 @@
1
- @font-face{font-family:"ET Book";src:url("https://edwardtufte.github.io/et-book/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.woff") format("woff"),url("https://edwardtufte.github.io/et-book/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.ttf") format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:"ET Book";src:url("https://edwardtufte.github.io/et-book/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.woff") format("woff"),url("https://edwardtufte.github.io/et-book/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.ttf") format("truetype");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:"ET Book";src:url("https://edwardtufte.github.io/et-book/et-book/et-book-bold-line-figures/et-book-bold-line-figures.woff") format("woff"),url("https://edwardtufte.github.io/et-book/et-book/et-book-bold-line-figures/et-book-bold-line-figures.ttf") format("truetype");font-weight:700;font-style:normal;font-display:swap}@layer gp.reset,gp.tokens,gp.base,gp.layout,gp.components,gp.dataviz,gp.utilities; @layer gp.tokens{:root{color-scheme:light;--gp-text-width:640px;--gp-margin-width:260px;--gp-gutter:48px;--gp-outer-margin:clamp(3rem, 8vw, 6rem);--gp-page-width:calc(var(--gp-text-width) + var(--gp-gutter) + var(--gp-margin-width));--gp-serif:"ET Book","Palatino Linotype",Palatino,"Book Antiqua",Georgia,serif;--gp-sans:"Gill Sans","Gill Sans MT",Calibri,Optima,"Trebuchet MS",sans-serif;--gp-mono:"Lucida Console","Andale Mono",Monaco,Consolas,monospace;--gp-font-size:clamp(14px, 1vw + 10px, 16px);--gp-line-height:clamp(1.58, 1.5 + 0.4vw, 1.68);--gp-small:0.8em;--gp-caption:0.77em;--gp-micro:0.69em;--gp-space-xs:0.25rem;--gp-space-sm:0.5rem;--gp-space-md:1rem;--gp-space-lg:2rem;--gp-space-xl:4rem;--gp-paper:oklch(99.4% 0.008 98);--gp-ink:oklch(17% 0.004 60);--gp-margin-ink:oklch(43% 0.003 60);--gp-ghost-ink:oklch(69% 0.003 60);--gp-rule:oklch(62% 0.002 60);--gp-light-rule:oklch(84% 0.005 95);--gp-code-bg:oklch(95% 0.006 95);--gp-red:oklch(44% 0.14 27);--gp-red-light:oklch(64% 0.10 27);--gp-blue:oklch(44% 0.09 251);--gp-blue-light:oklch(64% 0.07 251);--gp-green:oklch(50% 0.08 149);--gp-green-light:oklch(67% 0.06 149);--gp-ochre:oklch(49% 0.10 72);--gp-ochre-light:oklch(67% 0.08 72);--gp-brown:oklch(42% 0.09 52);--gp-gray-data:oklch(51% 0.002 60);--gp-seq-1:oklch(95% 0.04 80);--gp-seq-2:oklch(82% 0.07 76);--gp-seq-3:oklch(68% 0.09 72);--gp-seq-4:oklch(55% 0.10 68);--gp-seq-5:oklch(42% 0.10 65);--gp-div-lo-2:oklch(44% 0.09 251);--gp-div-lo-1:oklch(64% 0.07 251);--gp-div-mid:oklch(92% 0.004 95);--gp-div-hi-1:oklch(64% 0.10 27);--gp-div-hi-2:oklch(44% 0.14 27);--gp-ease:cubic-bezier(0.4, 0, 0.2, 1);--gp-ease-out:cubic-bezier(0, 0, 0.2, 1)}@media (prefers-color-scheme:dark){:root:not(.light){color-scheme:dark;--gp-paper:oklch(17% 0.008 80);--gp-ink:oklch(90% 0.005 85);--gp-margin-ink:oklch(63% 0.005 85);--gp-ghost-ink:oklch(40% 0.004 85);--gp-rule:oklch(35% 0.003 85);--gp-light-rule:oklch(27% 0.005 85);--gp-code-bg:oklch(22% 0.007 80);--gp-red:oklch(66% 0.13 27);--gp-red-light:oklch(76% 0.09 27);--gp-blue:oklch(66% 0.09 251);--gp-blue-light:oklch(76% 0.06 251);--gp-green:oklch(66% 0.08 149);--gp-green-light:oklch(76% 0.06 149);--gp-ochre:oklch(66% 0.09 72);--gp-ochre-light:oklch(76% 0.07 72);--gp-gray-data:oklch(58% 0.002 60);--gp-seq-1:oklch(35% 0.06 72);--gp-seq-2:oklch(47% 0.08 72);--gp-seq-3:oklch(59% 0.09 72);--gp-seq-4:oklch(71% 0.09 72);--gp-seq-5:oklch(83% 0.07 72);--gp-div-lo-2:oklch(66% 0.09 251);--gp-div-lo-1:oklch(76% 0.06 251);--gp-div-mid:oklch(25% 0.004 85);--gp-div-hi-1:oklch(76% 0.09 27);--gp-div-hi-2:oklch(66% 0.13 27)}}}.dark{color-scheme:dark;--gp-paper:oklch(17% 0.008 80);--gp-ink:oklch(90% 0.005 85);--gp-margin-ink:oklch(63% 0.005 85);--gp-ghost-ink:oklch(40% 0.004 85);--gp-rule:oklch(35% 0.003 85);--gp-light-rule:oklch(27% 0.005 85);--gp-code-bg:oklch(22% 0.007 80);--gp-red:oklch(66% 0.13 27);--gp-red-light:oklch(76% 0.09 27);--gp-blue:oklch(66% 0.09 251);--gp-blue-light:oklch(76% 0.06 251);--gp-green:oklch(66% 0.08 149);--gp-green-light:oklch(76% 0.06 149);--gp-ochre:oklch(66% 0.09 72);--gp-ochre-light:oklch(76% 0.07 72);--gp-gray-data:oklch(58% 0.002 60);--gp-seq-1:oklch(35% 0.06 72);--gp-seq-2:oklch(47% 0.08 72);--gp-seq-3:oklch(59% 0.09 72);--gp-seq-4:oklch(71% 0.09 72);--gp-seq-5:oklch(83% 0.07 72);--gp-div-lo-2:oklch(66% 0.09 251);--gp-div-lo-1:oklch(76% 0.06 251);--gp-div-mid:oklch(25% 0.004 85);--gp-div-hi-1:oklch(76% 0.09 27);--gp-div-hi-2:oklch(66% 0.13 27)}:root{--svg-ink:#111111;--svg-margin:#555555;--svg-mid:#777777;--svg-rule-mid:#999999;--svg-ghost:#aaaaaa;--svg-rule:#cccccc;--svg-light-rule:#d4d4c8;--svg-soft:#dddddd;--svg-faint:#eeeeee;--svg-dim:#888888;--svg-dark-rule:#333333;--svg-red:#b5322a;--svg-blue:#3a5a8c;--svg-green:#4a7a50;--svg-ochre:#8b6914;--svg-blue-light:#90a8c8}.dark{--svg-ink:#e6e0d8;--svg-margin:#a09898;--svg-mid:#8a8480;--svg-rule-mid:#606060;--svg-ghost:#505050;--svg-rule:#404040;--svg-light-rule:#383430;--svg-soft:#353030;--svg-faint:#2e2a26;--svg-dim:#585450;--svg-dark-rule:#888480;--svg-red:#e07070;--svg-blue:#7090c8;--svg-green:#70b078;--svg-ochre:#c8a040;--svg-blue-light:#7090c8}.dark .heat-table td.heat,.dark .heat-table td.heat-div{color:oklch(93% .005 85)!important;box-shadow:inset 0 0 0 100vmax oklch(17% .008 80 / .6)}@media (prefers-color-scheme:dark){:root:not(.light) .heat-table td.heat,:root:not(.light) .heat-table td.heat-div{color:oklch(93% .005 85)!important;box-shadow:inset 0 0 0 100vmax oklch(17% .008 80 / .6)}}@layer gp.reset{*,::after,::before{box-sizing:border-box}html{font-size:var(--gp-font-size);background:var(--gp-paper);color:var(--gp-ink);transition:background-color .25s var(--gp-ease),color .25s var(--gp-ease)}}@layer gp.base{body{font-family:var(--gp-serif);font-weight:400;line-height:var(--gp-line-height);background:var(--gp-paper);color:var(--gp-ink);margin:0;padding:0;counter-reset:sidenote-counter;text-align:left;hyphens:none;-webkit-hyphens:none;font-variant-numeric:oldstyle-nums proportional-nums;font-optical-sizing:auto;min-height:100dvh;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}h1{font-size:clamp(1.7rem, 3vw + .8rem, 2.4rem);font-style:italic;font-weight:400;line-height:1.18;font-optical-sizing:auto;margin:0 0 var(--gp-space-sm);max-width:var(--gp-text-width)}h2{font-size:clamp(1rem, .8vw + .75rem, 1.1rem);font-style:italic;font-weight:400;margin:var(--gp-space-lg) 0 var(--gp-space-sm);max-width:var(--gp-text-width)}h3{font-size:1rem;font-style:italic;font-weight:400;margin:var(--gp-space-md) 0 var(--gp-space-xs);max-width:var(--gp-text-width)}h4,h5,h6{font-size:.94rem;font-weight:400;font-variant:small-caps;letter-spacing:.06em;margin:var(--gp-space-md) 0 var(--gp-space-xs);max-width:var(--gp-text-width)}.subtitle{font-size:1.04rem;font-style:italic;margin:calc(-1 * var(--gp-space-xs)) 0 var(--gp-space-lg);color:var(--gp-margin-ink);max-width:var(--gp-text-width)}.author{font-family:var(--gp-sans);font-size:var(--gp-small);letter-spacing:.04em;color:var(--gp-margin-ink);margin:calc(-1 * var(--gp-space-md)) 0 var(--gp-space-xl);font-variant-numeric:lining-nums;max-width:var(--gp-text-width)}p{margin:0 0 var(--gp-space-md);max-width:var(--gp-text-width)}p+p{margin-top:calc(-1 * var(--gp-space-sm));text-indent:1.5em}blockquote+p,figure+p,h1+p,h2+p,h3+p,h4+p,hr+p{text-indent:0}p.lead{font-size:1.06rem;text-indent:0}p.drop-cap::first-letter{font-size:3.6em;line-height:.72;float:left;padding-right:.06em;margin-top:.06em;font-style:normal}.small-caps,abbr{font-variant:small-caps;letter-spacing:.06em;font-size:.9em}em{font-style:italic}strong{font-weight:700}sub,sup{font-size:.7em;line-height:0;position:relative;vertical-align:baseline;font-variant-numeric:lining-nums}sup{top:-.5em}sub{bottom:-.25em}a{color:var(--gp-ink);text-decoration:underline;text-decoration-color:var(--gp-light-rule);text-underline-offset:2px;transition:text-decoration-color .15s}a:hover{text-decoration-color:var(--gp-ink)}.marginnote a,.sidenote a,figcaption a{color:var(--gp-margin-ink)}hr{border:none;margin:var(--gp-space-xl) 0;max-width:var(--gp-text-width)}hr::after{content:"· · ·";display:block;text-align:center;color:var(--gp-light-rule);letter-spacing:.5em}.rule-thin{border:none;border-top:.5px solid var(--gp-light-rule);margin:var(--gp-space-md) 0;max-width:var(--gp-text-width)}.lnf,table{font-variant-numeric:lining-nums tabular-nums}.unit{font-size:.82em;color:var(--gp-margin-ink);font-variant-numeric:lining-nums}.datum{font-variant-numeric:lining-nums tabular-nums;font-family:var(--gp-sans);font-size:.9em;letter-spacing:-.01em}.data-label{font-family:var(--gp-sans);font-size:var(--gp-micro);color:var(--gp-margin-ink)}.source-line{font-family:var(--gp-sans);font-size:var(--gp-micro);color:var(--gp-ghost-ink);margin-top:var(--gp-space-xs);max-width:var(--gp-text-width)}.source-line::before{content:"Source: "}ol,ul{padding-left:1.5em;margin:0 0 var(--gp-space-md);max-width:var(--gp-text-width)}li{margin-bottom:var(--gp-space-xs);line-height:var(--gp-line-height)}li>ol,li>ul{margin:var(--gp-space-xs) 0}dl{margin:0 0 var(--gp-space-md);max-width:var(--gp-text-width)}dt{font-variant:small-caps;letter-spacing:.05em;margin-top:var(--gp-space-sm)}dd{margin-left:1.5em;margin-bottom:var(--gp-space-xs);color:var(--gp-margin-ink);font-size:var(--gp-small)}blockquote{font-style:italic;margin:var(--gp-space-md) 0 var(--gp-space-md) 2em;padding:0;border:none;max-width:calc(var(--gp-text-width) - 2em)}blockquote cite,blockquote footer{font-style:normal;font-size:var(--gp-small);color:var(--gp-margin-ink);display:block;margin-top:var(--gp-space-xs)}blockquote footer::before{content:"— "}.epigraph{margin:var(--gp-space-xl) 0 var(--gp-space-xl) 5%;max-width:var(--gp-text-width)}.epigraph>blockquote{font-style:italic;font-size:1.04rem;margin:0;padding:0;border:none}.epigraph>blockquote footer{font-style:normal;font-size:var(--gp-small);color:var(--gp-margin-ink);display:block;margin-top:var(--gp-space-sm)}code,kbd,samp{font-family:var(--gp-mono);font-size:.84em;background:var(--gp-code-bg);padding:.06em .28em;border-radius:2px;font-variant-numeric:lining-nums;transition:background-color .25s}pre{background:var(--gp-code-bg);padding:var(--gp-space-md);overflow-x:auto;margin:var(--gp-space-md) 0;border-left:2px solid var(--gp-light-rule);max-width:var(--gp-text-width);transition:background-color .25s,border-color .25s}pre code{background:0 0;padding:0;font-size:var(--gp-small);line-height:1.5}.new-thought{font-variant:small-caps;letter-spacing:.08em}.callout{font-size:var(--gp-small);color:var(--gp-margin-ink);font-style:italic;padding-left:1em;border-left:1px solid var(--gp-light-rule);margin:var(--gp-space-sm) 0;max-width:var(--gp-text-width)}details.data-note{font-size:var(--gp-small);color:var(--gp-margin-ink);margin:var(--gp-space-sm) 0;border-left:1px solid var(--gp-light-rule);padding-left:var(--gp-space-sm);max-width:var(--gp-text-width)}details.data-note summary{cursor:pointer;font-family:var(--gp-sans);font-size:var(--gp-micro);letter-spacing:.08em;text-transform:uppercase;color:var(--gp-ghost-ink);list-style:none;padding:var(--gp-space-xs) 0;transition:color .15s;user-select:none}details.data-note summary::-webkit-details-marker{display:none}details.data-note summary::before{content:"▸ ";font-size:.8em}details.data-note[open] summary::before{content:"▾ "}details.data-note summary:hover{color:var(--gp-margin-ink)}.bibliography{margin:var(--gp-space-lg) 0;max-width:var(--gp-text-width)}.bibliography ol,.bibliography ul{padding-left:0;list-style:none}.bibliography li{font-size:var(--gp-small);padding-left:2em;text-indent:-2em;margin-bottom:var(--gp-space-sm);color:var(--gp-margin-ink);line-height:1.5}.bibliography .title{font-style:italic}}@layer gp.layout{article{position:relative;max-width:var(--gp-page-width);margin:0 auto;padding:var(--gp-space-xl) var(--gp-outer-margin)}section{padding-top:var(--gp-space-lg)}.running-header{font-family:var(--gp-sans);font-size:var(--gp-micro);letter-spacing:.12em;text-transform:uppercase;color:var(--gp-ghost-ink);max-width:var(--gp-page-width);display:flex;justify-content:space-between;border-bottom:.5px solid var(--gp-light-rule);padding-bottom:var(--gp-space-sm);margin-bottom:var(--gp-space-xl);transition:border-color .25s,color .25s}.figure-compare{display:grid;grid-template-columns:1fr 1fr;gap:var(--gp-space-md);max-width:var(--gp-text-width);margin:var(--gp-space-lg) 0;align-items:start}.figure-compare.figure-compare-full{max-width:var(--gp-page-width)}.figure-compare figure{margin:0;max-width:none}.figure-compare figcaption{float:none!important;width:auto!important;margin-right:0!important;margin-top:var(--gp-space-xs)}.compare-wrap{display:grid;grid-template-columns:1fr 1fr;gap:var(--gp-space-lg);max-width:var(--gp-text-width);margin:var(--gp-space-lg) 0;border-top:.75px solid var(--gp-rule);padding-top:var(--gp-space-md)}.compare-wrap.compare-wrap-full{max-width:var(--gp-page-width)}.compare-col{font-size:var(--gp-small)}.compare-col__header{font-family:var(--gp-sans);font-size:var(--gp-micro);letter-spacing:.1em;text-transform:uppercase;color:var(--gp-margin-ink);margin-bottom:var(--gp-space-sm);padding-bottom:2px;border-bottom:.5px solid var(--gp-light-rule)}.compare-col.before{color:var(--gp-margin-ink)}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:var(--gp-space-md) var(--gp-space-lg);border-top:1.5px solid var(--gp-ink);padding-top:var(--gp-space-md);margin:var(--gp-space-lg) 0;max-width:var(--gp-text-width);transition:border-color .25s}.evidence{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:var(--gp-space-lg);max-width:var(--gp-page-width);margin:var(--gp-space-lg) 0;align-items:start}.evidence__image{margin:0;max-width:none}.evidence__image img,.evidence__image svg{max-width:100%;height:auto;display:block}.evidence__image figcaption{float:none;width:auto;margin-right:0;margin-top:var(--gp-space-xs);font-size:var(--gp-caption);font-family:var(--gp-sans);color:var(--gp-margin-ink)}.evidence__analysis{font-size:var(--gp-small);line-height:1.6;color:var(--gp-ink);padding-top:.1rem}.evidence__analysis p{max-width:none}.evidence__analysis p+p{text-indent:1.2em}.evidence__caption{grid-column:1/-1;font-family:var(--gp-sans);font-size:var(--gp-caption);color:var(--gp-margin-ink);border-top:.5px solid var(--gp-light-rule);padding-top:var(--gp-space-xs);margin-top:var(--gp-space-xs)}.brief-header{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--gp-space-md) var(--gp-space-lg);align-items:end;max-width:var(--gp-page-width);margin:var(--gp-space-lg) 0;padding-bottom:var(--gp-space-sm);border-bottom:.75px solid var(--gp-rule)}.brief-header__meta{margin:0 0 .4rem;font-family:var(--gp-sans);font-size:.74rem;letter-spacing:.1em;text-transform:uppercase;color:var(--gp-ghost-ink)}.brief-header__title{margin:0;max-width:none;font-size:clamp(1.5rem, 2vw + 1rem, 2.2rem)}.brief-header__dek{margin:.45rem 0 0;max-width:52rem;font-size:var(--gp-small);color:var(--gp-margin-ink);text-indent:0}.brief-header__stat{text-align:right;align-self:start;min-width:12rem}.brief-header__label{display:block;margin-bottom:.2rem;font-family:var(--gp-sans);font-size:.74rem;letter-spacing:.08em;text-transform:uppercase;color:var(--gp-ghost-ink)}.brief-header__value{display:block;font-size:clamp(2rem, 3vw + .7rem, 3.1rem);line-height:.95;color:var(--gp-green);font-style:italic;font-variant-numeric:lining-nums tabular-nums}.brief-header__subvalue{display:block;margin-top:.2rem;font-family:var(--gp-sans);font-size:var(--gp-caption);color:var(--gp-margin-ink)}.brief-backlink{display:inline-block;margin-bottom:var(--gp-space-sm);font-family:var(--gp-sans);font-size:.8rem;letter-spacing:.04em;color:var(--gp-ghost-ink);text-decoration:none}.brief-backlink:hover{color:var(--gp-ink)}.gp-map-block{max-width:var(--gp-page-width);margin:var(--gp-space-lg) 0}.gp-map-frame{position:relative;border:.5px solid var(--gp-light-rule);background:var(--gp-code-bg);min-height:28rem;overflow:hidden;box-shadow:0 10px 30px oklch(from var(--gp-ink) l c h / .08);transition:border-color .25s,background-color .25s,box-shadow .25s}.gp-map{width:100%;min-height:28rem;background:oklch(from var(--gp-paper) calc(l - .02) c h)}.gp-map-panel{position:absolute;left:var(--gp-space-md);top:var(--gp-space-md);z-index:2;width:min(19rem,calc(100% - 2rem));padding:.8rem .9rem;background:oklch(from var(--gp-paper) l c h / .92);border:.5px solid oklch(from var(--gp-rule) l c h / .5);backdrop-filter:blur(10px)}.gp-map-kicker{display:block;margin-bottom:.35rem;font-family:var(--gp-sans);font-size:var(--gp-micro);letter-spacing:.12em;text-transform:uppercase;color:var(--gp-ghost-ink)}.gp-map-title{margin:0 0 .45rem;font-size:1rem;line-height:1.3;color:var(--gp-ink);max-width:none}.gp-map-panel p{margin:0;max-width:none;font-family:var(--gp-sans);font-size:var(--gp-small);line-height:1.45;color:var(--gp-margin-ink);text-indent:0}.gp-map-key{display:flex;flex-wrap:wrap;gap:.5rem .9rem;margin:.7rem 0 0;padding:0;list-style:none}.gp-map-key li{display:inline-flex;align-items:center;gap:.35rem;margin:0;font-family:var(--gp-sans);font-size:var(--gp-micro);letter-spacing:.02em;color:var(--gp-margin-ink)}.gp-map-swatch{width:.72rem;height:.72rem;border-radius:999px;border:1px solid oklch(from var(--gp-paper) calc(l - .18) c h / .55);flex:0 0 auto}.gp-map-swatch.red{background:var(--gp-red)}.gp-map-swatch.blue{background:var(--gp-blue)}.gp-map-swatch.ochre{background:var(--gp-ochre)}.gp-map-meta{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem;margin-top:var(--gp-space-sm);padding-top:var(--gp-space-sm);border-top:.5px solid var(--gp-light-rule);font-family:var(--gp-sans)}.gp-map-stat{font-size:var(--gp-micro);color:var(--gp-ghost-ink);letter-spacing:.06em;text-transform:uppercase}.gp-map-stat strong{display:block;margin-top:.12rem;font-size:1rem;line-height:1.2;letter-spacing:normal;text-transform:none;color:var(--gp-ink);font-weight:400;font-variant-numeric:lining-nums tabular-nums}.gp-map-frame .maplibregl-ctrl-group{border-radius:0;box-shadow:none;border:.5px solid var(--gp-light-rule);background:oklch(from var(--gp-paper) l c h / .9)}.gp-map-frame .maplibregl-ctrl button .maplibregl-ctrl-icon{filter:grayscale(1)}.gp-map-frame .maplibregl-popup-content{border-radius:0;padding:.55rem .65rem;font-family:var(--gp-sans);font-size:var(--gp-small);color:var(--gp-ink);background:oklch(from var(--gp-paper) l c h / .96);box-shadow:0 6px 20px oklch(from var(--gp-ink) l c h / .12)}.gp-map-frame .maplibregl-popup-tip{border-top-color:oklch(from var(--gp-paper) l c h / .96)}}@layer gp.components{.sidenote-number{counter-increment:sidenote-counter}.sidenote-number::after,.sidenote::before{content:counter(sidenote-counter);font-size:.68rem;vertical-align:super;line-height:0;font-variant-numeric:lining-nums}.sidenote-number::after{color:var(--gp-margin-ink);padding-left:1px}.sidenote::before{color:var(--gp-margin-ink);padding-right:4px}input.sidenote-toggle{display:none}.marginnote,.sidenote{float:right;clear:right;margin-right:calc(-1 * (var(--gp-margin-width) + var(--gp-gutter)));width:var(--gp-margin-width);font-size:var(--gp-small);line-height:1.5;color:var(--gp-margin-ink);font-style:normal;vertical-align:baseline;position:sticky;top:2rem;padding-top:.08rem;transition:color .25s}.marginnote img,.marginnote svg{max-width:100%;height:auto;display:block;margin-bottom:var(--gp-space-xs)}.marginnote svg{overflow:visible}.marginnote-label{font-family:var(--gp-sans);font-size:var(--gp-micro);letter-spacing:.1em;text-transform:uppercase;color:var(--gp-ghost-ink);display:block;margin-bottom:2px}label.sidenote-toggle{display:none;cursor:pointer}label.sidenote-number{display:inline}.section-marker{float:right;clear:right;margin-right:calc(-1 * (var(--gp-margin-width) + var(--gp-gutter)));width:var(--gp-margin-width);font-family:var(--gp-sans);font-size:var(--gp-micro);letter-spacing:.1em;text-transform:uppercase;color:var(--gp-ghost-ink);padding-top:.2rem;position:sticky;top:2rem}figure{max-width:var(--gp-text-width);margin:var(--gp-space-lg) 0;padding:0}figure canvas,figure img,figure svg{max-width:100%;height:auto;display:block}figure.figure-full{max-width:var(--gp-page-width)}figure.figure-margin{float:right;clear:right;margin-right:calc(-1 * (var(--gp-margin-width) + var(--gp-gutter)));width:var(--gp-margin-width);margin-top:0;margin-bottom:var(--gp-space-md)}figcaption{font-size:var(--gp-caption);font-family:var(--gp-sans);font-optical-sizing:auto;line-height:1.45;color:var(--gp-margin-ink);margin-top:var(--gp-space-xs);transition:color .25s}figure:not(.figure-margin):not(.figure-full):not(.evidence__image) figcaption{float:right;clear:right;margin-right:calc(-1 * (var(--gp-margin-width) + var(--gp-gutter)));width:var(--gp-margin-width);margin-top:0}figure.figure-full figcaption{float:right;width:var(--gp-margin-width);margin-top:var(--gp-space-xs)}figure.figure-margin figcaption{float:none;width:auto;font-size:.71em}table{max-width:var(--gp-text-width);width:100%;border-collapse:collapse;font-family:var(--gp-sans);font-size:var(--gp-small);font-variant-numeric:lining-nums tabular-nums;margin:var(--gp-space-lg) 0;line-height:1.4;transition:color .25s}thead{border-top:1.5px solid var(--gp-ink);border-bottom:.75px solid var(--gp-ink)}tbody tr:last-child td{border-bottom:1.5px solid var(--gp-ink);padding-bottom:var(--gp-space-sm)}tbody tr.midrule td{border-top:.75px solid var(--gp-rule);padding-top:var(--gp-space-sm)}tbody tr.midrule-above td{padding-bottom:var(--gp-space-sm)}th{font-weight:400;font-variant:small-caps;letter-spacing:.06em;text-align:left;padding:var(--gp-space-xs) var(--gp-space-sm);vertical-align:bottom}td{padding:var(--gp-space-xs) var(--gp-space-sm);vertical-align:top}td.num,th.num{text-align:right}td.neg{color:var(--gp-red)}td.pos{color:var(--gp-green)}tr.highlight td{background:var(--gp-code-bg);font-style:italic}.table-dense td,.table-dense th{padding:2px var(--gp-space-xs);font-size:var(--gp-micro)}table.table-full{max-width:var(--gp-page-width)}table.table-striped tbody tr:nth-child(2n) td{background:oklch(from var(--gp-paper) calc(l - .02) c h)}caption{font-size:var(--gp-caption);font-family:var(--gp-sans);color:var(--gp-margin-ink);text-align:left;caption-side:top;padding-bottom:var(--gp-space-xs)}.sparkline{display:inline-block;vertical-align:middle;line-height:1;position:relative;top:-1px}.sparkline svg{overflow:visible}@media (prefers-reduced-motion:no-preference){.sp-draw{stroke-dasharray:300;stroke-dashoffset:300;animation:gp-draw .9s var(--gp-ease-out) forwards}@keyframes gp-draw{to{stroke-dashoffset:0}}}table.sparkline-table{font-family:var(--gp-sans);font-size:var(--gp-small)}table.sparkline-table .sp-cell{padding-top:2px;padding-bottom:2px}table.sparkline-table .sp-cell svg{display:block;overflow:visible}.small-multiples{max-width:var(--gp-page-width);display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:var(--gp-space-md);margin:var(--gp-space-lg) 0}.small-multiples-3{grid-template-columns:repeat(3,1fr)}.small-multiples-4{grid-template-columns:repeat(4,1fr)}.small-multiples-6{grid-template-columns:repeat(6,1fr)}.small-multiples figure{margin:0;max-width:none}.small-multiples figure figcaption{float:none!important;width:auto!important;margin-right:0!important;margin-top:var(--gp-space-xs);font-size:.7em}.small-multiples-xlabel{grid-column:1/-1;font-family:var(--gp-sans);font-size:var(--gp-micro);color:var(--gp-margin-ink);text-align:center;margin-top:calc(-1 * var(--gp-space-sm))}.pull-stat{margin:var(--gp-space-lg) 0;max-width:var(--gp-text-width)}.pull-stat__number{font-size:clamp(2.4rem, 4vw + 1rem, 3.5rem);line-height:1;font-style:italic;font-weight:400;display:block;font-variant-numeric:lining-nums}.pull-stat__label{font-family:var(--gp-sans);font-size:var(--gp-small);color:var(--gp-margin-ink);letter-spacing:.04em;display:block;margin-top:.2em}.pull-stat__context{font-size:var(--gp-small);color:var(--gp-ghost-ink);font-style:italic;display:block}.pull-quote{font-size:clamp(1.2rem, 2vw + .6rem, 1.45rem);font-style:italic;line-height:1.35;margin:var(--gp-space-lg) 0;max-width:var(--gp-text-width)}.metric-strip{max-width:var(--gp-page-width);display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:0;border-top:.75px solid var(--gp-rule);border-bottom:.75px solid var(--gp-rule);margin:var(--gp-space-md) 0}.metric-strip__item{padding:.55rem .8rem .5rem 0;font-family:var(--gp-sans)}.metric-strip__label{display:block;font-size:.74rem;letter-spacing:.08em;text-transform:uppercase;color:var(--gp-ghost-ink)}.metric-strip__value{display:block;margin-top:.14rem;font-size:1.05rem;color:var(--gp-ink);font-style:italic;font-variant-numeric:lining-nums tabular-nums}.metric-strip__value.green{color:var(--gp-green)}.metric-strip__value.red{color:var(--gp-red)}.metric-strip__value.blue{color:var(--gp-blue)}.tab-nav{max-width:var(--gp-page-width);display:flex;flex-wrap:wrap;gap:.1rem .9rem;margin:0 0 var(--gp-space-md);padding:0 0 var(--gp-space-xs);border-bottom:.5px solid var(--gp-light-rule);list-style:none}.tab-nav li{margin:0}.tab-nav a,.tab-nav button{display:inline-block;padding:.32rem 0;border:0;border-bottom:1.5px solid transparent;background:0 0;font-family:var(--gp-sans);font-size:.76rem;letter-spacing:.08em;text-transform:uppercase;color:var(--gp-ghost-ink);text-decoration:none;cursor:pointer}.tab-nav .is-active,.tab-nav a[aria-current=page],.tab-nav button[aria-selected=true]{color:var(--gp-ink);border-bottom-color:var(--gp-ink)}.tab-nav.tab-nav--filled{gap:.25rem .55rem;border-bottom-color:var(--gp-rule)}.tab-nav.tab-nav--filled a,.tab-nav.tab-nav--filled button{padding:.45rem .8rem;border-bottom-width:0;color:var(--gp-margin-ink)}.tab-nav.tab-nav--filled .is-active,.tab-nav.tab-nav--filled a[aria-current=page],.tab-nav.tab-nav--filled button[aria-selected=true]{background:var(--gp-ink);color:var(--gp-paper)}.analytic-grid{max-width:var(--gp-page-width);display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--gp-space-sm);margin:var(--gp-space-md) 0}.analytic-card{position:relative;min-height:8.5rem;padding:.75rem .8rem .7rem;border:.5px solid var(--gp-light-rule);background:linear-gradient(180deg,oklch(from var(--gp-paper) calc(l - .005) c h),oklch(from var(--gp-paper) calc(l - .018) c h));box-shadow:inset 0 1px 0 oklch(from var(--gp-paper) calc(l - .001) c h / .9)}.analytic-card::before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:var(--gp-ghost-ink)}.analytic-card.red::before{background:var(--gp-red)}.analytic-card.blue::before{background:var(--gp-blue)}.analytic-card.green::before{background:var(--gp-green)}.analytic-card.ochre::before{background:var(--gp-ochre)}.analytic-card__eyebrow{display:block;margin:0 0 .25rem;padding-left:.35rem;font-family:var(--gp-sans);font-size:.74rem;letter-spacing:.08em;text-transform:uppercase;color:var(--gp-ghost-ink)}.analytic-card__title{margin:0;padding-left:.35rem;max-width:none;font-size:.98rem;line-height:1.25}.analytic-card__value{display:block;margin:.5rem 0 .18rem;padding-left:.35rem;font-size:1.35rem;line-height:1;color:var(--gp-ink);font-style:italic;font-variant-numeric:lining-nums tabular-nums}.analytic-card__meta{display:block;padding-left:.35rem;font-family:var(--gp-sans);font-size:var(--gp-caption);color:var(--gp-margin-ink)}.algorithm-panel{max-width:var(--gp-text-width);margin:var(--gp-space-lg) 0;border:.5px solid var(--gp-light-rule);background:var(--gp-code-bg);padding:var(--gp-space-md)}.algorithm-panel__title{margin:0 0 .55rem;font-family:var(--gp-sans);font-size:.74rem;letter-spacing:.1em;text-transform:uppercase;color:var(--gp-ghost-ink)}.algorithm-panel pre{margin:0;max-width:none;border-left:0;padding:0;background:0 0}.activity-timeline{max-width:var(--gp-page-width);margin:var(--gp-space-lg) 0;padding-top:var(--gp-space-xs);border-top:.5px solid var(--gp-light-rule)}.activity-timeline__header{display:flex;justify-content:space-between;gap:var(--gp-space-sm);margin-bottom:var(--gp-space-sm);font-family:var(--gp-sans);font-size:.74rem;color:var(--gp-ghost-ink)}.activity-timeline__lane{display:grid;grid-template-columns:92px 1fr auto;align-items:center;gap:var(--gp-space-sm);margin-bottom:.45rem;font-family:var(--gp-sans);font-size:var(--gp-small)}.activity-timeline__label{color:var(--gp-margin-ink);text-align:right;white-space:nowrap}.activity-timeline__track{position:relative;height:.85rem;background:oklch(from var(--gp-paper) calc(l - .05) c h);overflow:hidden}.activity-timeline__span{position:absolute;left:var(--at-start,0);width:var(--at-width,50%);height:100%;background:var(--gp-ghost-ink)}.activity-timeline__span.red{background:var(--gp-red)}.activity-timeline__span.blue{background:var(--gp-blue)}.activity-timeline__span.green{background:var(--gp-green)}.activity-timeline__span.ochre{background:var(--gp-ochre)}.activity-timeline__value{color:var(--gp-ghost-ink);font-size:.74rem;white-space:nowrap}.bar-chart{list-style:none;padding:0;margin:var(--gp-space-lg) 0;max-width:var(--gp-text-width)}.bar-chart li{display:grid;grid-template-columns:160px 1fr auto;align-items:center;gap:var(--gp-space-sm);margin-bottom:var(--gp-space-xs);font-family:var(--gp-sans);font-size:var(--gp-small)}.bar-label{text-align:right;color:var(--gp-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bar{position:relative;height:1px;background:var(--gp-ghost-ink)}.bar::after{content:"";position:absolute;left:var(--bar-value,50%);top:-3px;width:1px;height:7px;background:var(--gp-ink)}.bar-chart.filled .bar{height:8px;background:0 0}.bar-chart.filled .bar::before{content:"";position:absolute;left:0;top:0;height:100%;width:var(--bar-value,0%);background:var(--gp-gray-data)}.bar-chart.filled .bar::after{display:none}.bar-value{color:var(--gp-margin-ink);white-space:nowrap;font-variant-numeric:tabular-nums lining-nums}.bar-chart.filled .bar.red::before,.bar.red::after{background:var(--gp-red)}.bar-chart.filled .bar.blue::before,.bar.blue::after{background:var(--gp-blue)}.bar-chart.filled .bar.green::before,.bar.green::after{background:var(--gp-green)}.bar-chart.filled .bar.ochre::before,.bar.ochre::after{background:var(--gp-ochre)}.ghost{opacity:.22}.near-ghost{opacity:.4}.focal{opacity:1}}@layer gp.dataviz{.dot-chart{list-style:none;padding:0;margin:var(--gp-space-lg) 0;max-width:var(--gp-text-width)}.dot-chart li{display:grid;grid-template-columns:160px 1fr auto;align-items:center;gap:var(--gp-space-sm);margin-bottom:var(--gp-space-xs);font-family:var(--gp-sans);font-size:var(--gp-small)}.dc-label{text-align:right;color:var(--gp-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dc-track{position:relative;height:1px;background:var(--gp-light-rule)}.dc-dot{position:absolute;left:var(--dc-pos,50%);top:50%;transform:translate(-50%,-50%);width:6px;height:6px;border-radius:50%;background:var(--gp-ink);transition:background .25s}.dc-dot.red{background:var(--gp-red)}.dc-dot.blue{background:var(--gp-blue)}.dc-dot.green{background:var(--gp-green)}.dc-dot.open{background:var(--gp-paper);border:1.5px solid var(--gp-ink)}.dc-value{color:var(--gp-margin-ink);font-variant-numeric:tabular-nums lining-nums}.dumbbell{list-style:none;padding:0;margin:var(--gp-space-lg) 0;max-width:var(--gp-text-width)}.dumbbell li{display:grid;grid-template-columns:160px 1fr auto;align-items:center;gap:var(--gp-space-sm);margin-bottom:var(--gp-space-sm);font-family:var(--gp-sans);font-size:var(--gp-small)}.db-label{text-align:right;color:var(--gp-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.db-track{position:relative;height:1px}.db-track::before{content:"";position:absolute;top:0;left:var(--db-l,30%);right:calc(100% - var(--db-r,70%));height:1px;background:var(--gp-ghost-ink)}.db-dot{position:absolute;top:50%;width:8px;height:8px;border-radius:50%}.db-dot--left{left:var(--db-l,30%);transform:translate(-50%,-50%);background:var(--gp-blue)}.db-dot--right{left:var(--db-r,70%);transform:translate(-50%,-50%);background:var(--gp-red)}.db-value{color:var(--gp-margin-ink);font-size:var(--gp-micro);white-space:nowrap;font-variant-numeric:lining-nums}.strip-plot{list-style:none;padding:0;margin:var(--gp-space-lg) 0;max-width:var(--gp-text-width)}.strip-plot li{display:grid;grid-template-columns:160px 1fr;align-items:center;gap:var(--gp-space-sm);margin-bottom:10px;font-family:var(--gp-sans);font-size:var(--gp-small)}.sp-label{text-align:right;color:var(--gp-ink);white-space:nowrap}.sp-track{position:relative;height:1px;background:var(--gp-light-rule)}.sp-dot{position:absolute;left:var(--sp-pos,50%);top:50%;transform:translate(-50%,-50%);width:5px;height:5px;border-radius:50%;background:var(--gp-ink);opacity:.65}.sp-dot.red{background:var(--gp-red)}.sp-dot.blue{background:var(--gp-blue)}.sp-dot.green{background:var(--gp-green)}.sp-axis-labels{display:flex;justify-content:space-between;margin-left:calc(160px + var(--gp-space-sm));font-family:var(--gp-sans);font-size:var(--gp-micro);color:var(--gp-margin-ink);margin-top:4px;font-variant-numeric:lining-nums}table.stem-leaf{font-family:var(--gp-mono);font-size:var(--gp-small);font-variant-numeric:lining-nums tabular-nums;max-width:var(--gp-text-width);margin:var(--gp-space-lg) 0;line-height:1.9;border-collapse:collapse;width:100%;border:none}table.stem-leaf thead{border-bottom:.75px solid var(--gp-rule)}table.stem-leaf thead th{font-family:var(--gp-sans);font-size:var(--gp-micro);letter-spacing:.06em;text-transform:uppercase;color:var(--gp-ghost-ink);font-weight:400;padding-bottom:3px}table.stem-leaf .sl-col-left{width:43%;text-align:right;padding-right:8px;color:var(--gp-blue)}table.stem-leaf .sl-col-stem{width:14%;text-align:center;color:var(--gp-margin-ink);border-left:.5px solid var(--gp-rule);border-right:.5px solid var(--gp-rule);padding:0 4px}table.stem-leaf thead .sl-col-stem{color:var(--gp-margin-ink)}table.stem-leaf .sl-col-right{width:43%;text-align:left;padding-left:8px}.sl-unit{font-family:var(--gp-sans);font-size:var(--gp-micro);color:var(--gp-ghost-ink);margin-top:var(--gp-space-xs)}.bullet-graphs{max-width:var(--gp-text-width);margin:var(--gp-space-lg) 0;display:flex;flex-direction:column;gap:var(--gp-space-md)}.bullet-graph{display:grid;grid-template-columns:140px 1fr auto;align-items:center;gap:var(--gp-space-sm);font-family:var(--gp-sans);font-size:var(--gp-small)}.bg-label{text-align:right;color:var(--gp-ink)}.bg-track{position:relative;height:16px;background:0 0}.bg-range{position:absolute;top:0;height:100%;display:inline-block}.bg-range-1{left:0;background:var(--gp-ghost-ink);opacity:.35}.bg-range-2{left:33%;background:var(--gp-ghost-ink);opacity:.22}.bg-range-3{left:66%;background:var(--gp-ghost-ink);opacity:.12}.bg-bar{position:absolute;left:0;top:25%;height:50%;background:var(--gp-ink);z-index:2;transition:background .25s}.bg-bar.red{background:var(--gp-red)}.bg-bar.blue{background:var(--gp-blue)}.bg-bar.green{background:var(--gp-green)}.bg-target{position:absolute;top:10%;height:80%;width:2px;background:var(--gp-ink);z-index:3;transform:translateX(-50%)}.bg-value{color:var(--gp-margin-ink);font-variant-numeric:tabular-nums lining-nums}.bg-axis{margin-left:calc(140px + var(--gp-space-sm));display:flex;justify-content:space-between;font-family:var(--gp-sans);font-size:var(--gp-micro);color:var(--gp-ghost-ink);border-top:.5px solid var(--gp-light-rule);padding-top:2px}.heat-table td.heat{color:var(--gp-ink);transition:background .2s;text-align:right}.heat-table td.heat[data-dark]{color:oklch(93% .005 85)}.heat-table td.heat-div{text-align:right;transition:background .2s}table.ranked-table td.rank{color:var(--gp-ghost-ink);text-align:right;padding-right:var(--gp-space-sm);font-variant-numeric:lining-nums tabular-nums;width:2em}table.ranked-table td.rank-label{background-image:radial-gradient(circle,var(--gp-light-rule) 1px,transparent 1px);background-size:6px 1px;background-position:0 .9em;background-repeat:repeat-x;padding-right:var(--gp-space-sm)}table.ranked-table td.rank-label span{background:var(--gp-paper);padding-right:4px;transition:background .25s}table.ranked-table td.rank-value{font-variant-numeric:tabular-nums lining-nums;text-align:right}table.ranked-table tr.rank-highlight td.rank-label,table.ranked-table tr.rank-highlight td.rank-label span{font-style:italic}.timeline{max-width:var(--gp-text-width);margin:var(--gp-space-lg) 0;font-family:var(--gp-sans);font-size:var(--gp-small)}.tl-track{position:relative;height:48px;border-bottom:1px solid var(--gp-ink)}.tl-event{position:absolute;left:var(--tl-pos,50%);bottom:0;transform:translateX(-50%);display:flex;flex-direction:column-reverse;align-items:center}.tl-event::after{content:"";display:block;width:6px;height:6px;border-radius:50%;background:var(--gp-ink)}.tl-event-label{font-size:var(--gp-micro);color:var(--gp-ink);white-space:nowrap;margin-bottom:4px;text-align:center}.tl-period{position:absolute;bottom:4px;left:var(--tl-start,0);right:calc(100% - var(--tl-end,50%));height:8px;background:var(--gp-ghost-ink);opacity:.4}.tl-period-label{position:absolute;top:-18px;left:0;font-size:var(--gp-micro);color:var(--gp-margin-ink);white-space:nowrap}.tl-period.red{background:var(--gp-red);opacity:.5}.tl-period.blue{background:var(--gp-blue);opacity:.5}.tl-period.green{background:var(--gp-green);opacity:.5}.tl-period.ochre{background:var(--gp-ochre);opacity:.5}.tl-axis{display:flex;justify-content:space-between;margin-top:4px;font-size:var(--gp-micro);color:var(--gp-margin-ink);font-variant-numeric:lining-nums}.tl-axis span::before{content:"";display:block;width:1px;height:4px;background:var(--gp-rule);margin:0 auto 2px}.slopegraph-wrap{max-width:var(--gp-text-width);margin:var(--gp-space-lg) 0}.parallel-coords{max-width:var(--gp-page-width);margin:var(--gp-space-lg) 0;overflow-x:auto}.parallel-coords svg{display:block;overflow:visible}.pc-line{fill:none;stroke:var(--gp-ghost-ink);stroke-width:.75;opacity:.5}.pc-line.highlight{stroke:var(--gp-red);stroke-width:1.5;opacity:1}.pc-line.blue-hl{stroke:var(--gp-blue);stroke-width:1.5;opacity:1}.pc-axis{stroke:var(--gp-rule);stroke-width:.75}.ann-line{stroke:var(--gp-ghost-ink);stroke-width:.6;fill:none}.ann-text{font-family:var(--gp-sans);font-size:8px;fill:var(--gp-margin-ink);font-style:italic}.ref-band{fill:var(--gp-ghost-ink);fill-opacity:0.10;stroke:none}.ref-line{stroke:var(--gp-rule);stroke-width:.75;stroke-dasharray:2 4;fill:none}.zero-line{stroke:var(--gp-rule);stroke-width:.75;stroke-dasharray:2 4;fill:none}}@layer gp.utilities{.gp-red{color:var(--gp-red)}.gp-blue{color:var(--gp-blue)}.gp-green{color:var(--gp-green)}.gp-ochre{color:var(--gp-ochre)}.full-bleed{max-width:var(--gp-page-width)!important}.align-right{text-align:right}.align-center{text-align:center}.sans{font-family:var(--gp-sans)}.mono{font-family:var(--gp-mono)}.italic{font-style:italic}.muted{color:var(--gp-margin-ink)}.very-muted{color:var(--gp-ghost-ink)}.small{font-size:var(--gp-small)}.micro{font-size:var(--gp-micro)}.cf::after{content:"";display:table;clear:both}.mt-sm{margin-top:var(--gp-space-sm)}.mt-md{margin-top:var(--gp-space-md)}.mt-lg{margin-top:var(--gp-space-lg)}.mt-xl{margin-top:var(--gp-space-xl)}.mb-sm{margin-bottom:var(--gp-space-sm)}.mb-md{margin-bottom:var(--gp-space-md)}.mb-lg{margin-bottom:var(--gp-space-lg)}.mb-xl{margin-bottom:var(--gp-space-xl)}.seq-1{color:var(--gp-seq-1)}.seq-2{color:var(--gp-seq-2)}.seq-3{color:var(--gp-seq-3)}.seq-4{color:var(--gp-seq-4)}.seq-5{color:var(--gp-seq-5)}}@media (max-width:960px){article{padding-top:var(--gp-space-lg);padding-bottom:var(--gp-space-lg)}label.sidenote-toggle:not(.sidenote-number){display:inline;cursor:pointer;color:var(--gp-red);font-size:.85em}.marginnote,.sidenote{display:none;float:none;position:static;margin:var(--gp-space-sm) 0;width:100%;background:var(--gp-code-bg);padding:var(--gp-space-sm) var(--gp-space-md);border-left:2px solid var(--gp-light-rule);font-size:var(--gp-small);color:var(--gp-margin-ink)}.sidenote-toggle:checked+.marginnote,.sidenote-toggle:checked+.sidenote{display:block}figure.figure-margin{float:none;margin-right:0;width:100%}figure:not(.figure-margin):not(.figure-full):not(.evidence__image) figcaption{float:none;margin-right:0;width:100%;margin-top:var(--gp-space-xs)}figure.figure-full,figure.figure-full figcaption{max-width:100%;float:none;width:100%}.compare-wrap,.evidence,.figure-compare{grid-template-columns:1fr}.evidence__caption{grid-column:1}.brief-header{grid-template-columns:1fr}.brief-header__stat{text-align:left;min-width:0}.gp-map,.gp-map-frame{min-height:24rem}.gp-map-panel{width:min(18rem,calc(100% - 2rem))}.gp-map-meta{grid-template-columns:repeat(3,minmax(0,1fr))}.small-multiples-3,.small-multiples-4{grid-template-columns:repeat(2,1fr)}.small-multiples-6{grid-template-columns:repeat(3,1fr)}.running-header{flex-direction:column}.bar-chart li,.dot-chart li,.dumbbell li{grid-template-columns:100px 1fr auto}.strip-plot li{grid-template-columns:100px 1fr}.sp-axis-labels{margin-left:calc(100px + var(--gp-space-sm))}.bullet-graph{grid-template-columns:100px 1fr auto}.bg-axis{margin-left:calc(100px + var(--gp-space-sm))}}@media (max-width:560px){article{padding-top:var(--gp-space-md);padding-bottom:var(--gp-space-md)}.stat-grid{grid-template-columns:repeat(2,1fr)}.metric-strip{grid-template-columns:repeat(2,minmax(0,1fr))}.activity-timeline__lane{grid-template-columns:70px 1fr}.activity-timeline__value{grid-column:2}.gp-map,.gp-map-frame{min-height:21rem}.gp-map-panel{left:var(--gp-space-sm);right:var(--gp-space-sm);top:var(--gp-space-sm);width:auto;padding:.7rem .75rem}.gp-map-meta{grid-template-columns:1fr;gap:.45rem}.bar-chart li,.dot-chart li,.dumbbell li{grid-template-columns:70px 1fr auto}.strip-plot li{grid-template-columns:70px 1fr}.sp-axis-labels{margin-left:calc(70px + var(--gp-space-sm))}.bullet-graph{grid-template-columns:70px 1fr auto}.bg-axis{margin-left:calc(70px + var(--gp-space-sm))}.small-multiples-3,.small-multiples-4,.small-multiples-6{grid-template-columns:repeat(2,1fr)}}@media print{:root{--gp-font-size:11pt;--gp-text-width:120mm;--gp-margin-width:50mm;--gp-gutter:10mm;--gp-outer-margin:0mm}html{color-scheme:light}body{background:#fff;color:#000}article{max-width:none;padding:0}a{text-decoration:none;color:#000}.marginnote,.sidenote{display:block!important;float:right;position:static;margin-right:calc(-1 * (var(--gp-margin-width) + var(--gp-gutter)));width:var(--gp-margin-width);font-size:8pt;background:0 0;border:none;padding:0}input.sidenote-toggle,label.sidenote-toggle:not(.sidenote-number){display:none}figure,table{break-inside:avoid}h1,h2,h3{break-after:avoid}}
1
+ @font-face{font-family:"ET Book";src:url("https://edwardtufte.github.io/et-book/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.woff") format("woff"),url("https://edwardtufte.github.io/et-book/et-book/et-book-roman-old-style-figures/et-book-roman-old-style-figures.ttf") format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:"ET Book";src:url("https://edwardtufte.github.io/et-book/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.woff") format("woff"),url("https://edwardtufte.github.io/et-book/et-book/et-book-display-italic-old-style-figures/et-book-display-italic-old-style-figures.ttf") format("truetype");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:"ET Book";src:url("https://edwardtufte.github.io/et-book/et-book/et-book-bold-line-figures/et-book-bold-line-figures.woff") format("woff"),url("https://edwardtufte.github.io/et-book/et-book/et-book-bold-line-figures/et-book-bold-line-figures.ttf") format("truetype");font-weight:700;font-style:normal;font-display:swap}@layer gp.reset,gp.tokens,gp.base,gp.layout,gp.components,gp.dataviz,gp.utilities; @layer gp.tokens{:root{color-scheme:light;--gp-text-width:640px;--gp-margin-width:260px;--gp-gutter:48px;--gp-outer-margin:clamp(3rem, 8vw, 6rem);--gp-page-width:calc(var(--gp-text-width) + var(--gp-gutter) + var(--gp-margin-width));--gp-serif:"ET Book","Palatino Linotype",Palatino,"Book Antiqua",Georgia,serif;--gp-sans:"Gill Sans","Gill Sans MT",Calibri,Optima,"Trebuchet MS",sans-serif;--gp-mono:"Lucida Console","Andale Mono",Monaco,Consolas,monospace;--gp-font-size:clamp(14px, 1vw + 10px, 16px);--gp-line-height:clamp(1.58, 1.5 + 0.4vw, 1.68);--gp-small:0.8em;--gp-caption:0.77em;--gp-micro:0.69em;--gp-space-xs:0.25rem;--gp-space-sm:0.5rem;--gp-space-md:1rem;--gp-space-lg:2rem;--gp-space-xl:4rem;--gp-paper:oklch(99.4% 0.008 98);--gp-ink:oklch(17% 0.004 60);--gp-margin-ink:oklch(43% 0.003 60);--gp-ghost-ink:oklch(69% 0.003 60);--gp-rule:oklch(62% 0.002 60);--gp-light-rule:oklch(84% 0.005 95);--gp-code-bg:oklch(95% 0.006 95);--gp-red:oklch(44% 0.14 27);--gp-red-light:oklch(64% 0.10 27);--gp-blue:oklch(44% 0.09 251);--gp-blue-light:oklch(64% 0.07 251);--gp-green:oklch(50% 0.08 149);--gp-green-light:oklch(67% 0.06 149);--gp-ochre:oklch(49% 0.10 72);--gp-ochre-light:oklch(67% 0.08 72);--gp-brown:oklch(42% 0.09 52);--gp-gray-data:oklch(51% 0.002 60);--gp-seq-1:oklch(95% 0.04 80);--gp-seq-2:oklch(82% 0.07 76);--gp-seq-3:oklch(68% 0.09 72);--gp-seq-4:oklch(55% 0.10 68);--gp-seq-5:oklch(42% 0.10 65);--gp-div-lo-2:oklch(44% 0.09 251);--gp-div-lo-1:oklch(64% 0.07 251);--gp-div-mid:oklch(92% 0.004 95);--gp-div-hi-1:oklch(64% 0.10 27);--gp-div-hi-2:oklch(44% 0.14 27);--gp-ease:cubic-bezier(0.4, 0, 0.2, 1);--gp-ease-out:cubic-bezier(0, 0, 0.2, 1)}@media (prefers-color-scheme:dark){:root:not(.light){color-scheme:dark;--gp-paper:oklch(17% 0.008 80);--gp-ink:oklch(90% 0.005 85);--gp-margin-ink:oklch(63% 0.005 85);--gp-ghost-ink:oklch(40% 0.004 85);--gp-rule:oklch(35% 0.003 85);--gp-light-rule:oklch(27% 0.005 85);--gp-code-bg:oklch(22% 0.007 80);--gp-red:oklch(66% 0.13 27);--gp-red-light:oklch(76% 0.09 27);--gp-blue:oklch(66% 0.09 251);--gp-blue-light:oklch(76% 0.06 251);--gp-green:oklch(66% 0.08 149);--gp-green-light:oklch(76% 0.06 149);--gp-ochre:oklch(66% 0.09 72);--gp-ochre-light:oklch(76% 0.07 72);--gp-gray-data:oklch(58% 0.002 60);--gp-seq-1:oklch(35% 0.06 72);--gp-seq-2:oklch(47% 0.08 72);--gp-seq-3:oklch(59% 0.09 72);--gp-seq-4:oklch(71% 0.09 72);--gp-seq-5:oklch(83% 0.07 72);--gp-div-lo-2:oklch(66% 0.09 251);--gp-div-lo-1:oklch(76% 0.06 251);--gp-div-mid:oklch(25% 0.004 85);--gp-div-hi-1:oklch(76% 0.09 27);--gp-div-hi-2:oklch(66% 0.13 27)}}}.dark{color-scheme:dark;--gp-paper:oklch(17% 0.008 80);--gp-ink:oklch(90% 0.005 85);--gp-margin-ink:oklch(63% 0.005 85);--gp-ghost-ink:oklch(40% 0.004 85);--gp-rule:oklch(35% 0.003 85);--gp-light-rule:oklch(27% 0.005 85);--gp-code-bg:oklch(22% 0.007 80);--gp-red:oklch(66% 0.13 27);--gp-red-light:oklch(76% 0.09 27);--gp-blue:oklch(66% 0.09 251);--gp-blue-light:oklch(76% 0.06 251);--gp-green:oklch(66% 0.08 149);--gp-green-light:oklch(76% 0.06 149);--gp-ochre:oklch(66% 0.09 72);--gp-ochre-light:oklch(76% 0.07 72);--gp-gray-data:oklch(58% 0.002 60);--gp-seq-1:oklch(35% 0.06 72);--gp-seq-2:oklch(47% 0.08 72);--gp-seq-3:oklch(59% 0.09 72);--gp-seq-4:oklch(71% 0.09 72);--gp-seq-5:oklch(83% 0.07 72);--gp-div-lo-2:oklch(66% 0.09 251);--gp-div-lo-1:oklch(76% 0.06 251);--gp-div-mid:oklch(25% 0.004 85);--gp-div-hi-1:oklch(76% 0.09 27);--gp-div-hi-2:oklch(66% 0.13 27)}:root{--svg-ink:#111111;--svg-margin:#555555;--svg-mid:#777777;--svg-rule-mid:#999999;--svg-ghost:#aaaaaa;--svg-rule:#cccccc;--svg-light-rule:#d4d4c8;--svg-soft:#dddddd;--svg-faint:#eeeeee;--svg-dim:#888888;--svg-dark-rule:#333333;--svg-red:#b5322a;--svg-blue:#3a5a8c;--svg-green:#4a7a50;--svg-ochre:#8b6914;--svg-blue-light:#90a8c8}.dark{--svg-ink:#e6e0d8;--svg-margin:#a09898;--svg-mid:#8a8480;--svg-rule-mid:#606060;--svg-ghost:#505050;--svg-rule:#404040;--svg-light-rule:#383430;--svg-soft:#353030;--svg-faint:#2e2a26;--svg-dim:#585450;--svg-dark-rule:#888480;--svg-red:#e07070;--svg-blue:#7090c8;--svg-green:#70b078;--svg-ochre:#c8a040;--svg-blue-light:#7090c8}.dark .heat-table td.heat,.dark .heat-table td.heat-div{color:oklch(93% .005 85)!important;box-shadow:inset 0 0 0 100vmax oklch(17% .008 80 / .6)}@media (prefers-color-scheme:dark){:root:not(.light) .heat-table td.heat,:root:not(.light) .heat-table td.heat-div{color:oklch(93% .005 85)!important;box-shadow:inset 0 0 0 100vmax oklch(17% .008 80 / .6)}}@layer gp.reset{*,::after,::before{box-sizing:border-box}html{font-size:var(--gp-font-size);background:var(--gp-paper);color:var(--gp-ink);transition:background-color .25s var(--gp-ease),color .25s var(--gp-ease)}}@layer gp.base{body{font-family:var(--gp-serif);font-weight:400;line-height:var(--gp-line-height);background:var(--gp-paper);color:var(--gp-ink);margin:0;padding:0;counter-reset:sidenote-counter;text-align:left;hyphens:none;-webkit-hyphens:none;font-variant-numeric:oldstyle-nums proportional-nums;font-optical-sizing:auto;min-height:100dvh;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}h1{font-size:clamp(1.7rem, 3vw + .8rem, 2.4rem);font-style:italic;font-weight:400;line-height:1.18;font-optical-sizing:auto;margin:0 0 var(--gp-space-sm);max-width:var(--gp-text-width)}h2{font-size:clamp(1rem, .8vw + .75rem, 1.1rem);font-style:italic;font-weight:400;margin:var(--gp-space-lg) 0 var(--gp-space-sm);max-width:var(--gp-text-width)}h3{font-size:1rem;font-style:italic;font-weight:400;margin:var(--gp-space-md) 0 var(--gp-space-xs);max-width:var(--gp-text-width)}h4,h5,h6{font-size:.94rem;font-weight:400;font-variant:small-caps;letter-spacing:.06em;margin:var(--gp-space-md) 0 var(--gp-space-xs);max-width:var(--gp-text-width)}.subtitle{font-size:1.04rem;font-style:italic;margin:calc(-1 * var(--gp-space-xs)) 0 var(--gp-space-lg);color:var(--gp-margin-ink);max-width:var(--gp-text-width)}.author{font-family:var(--gp-sans);font-size:var(--gp-small);letter-spacing:.04em;color:var(--gp-margin-ink);margin:calc(-1 * var(--gp-space-md)) 0 var(--gp-space-xl);font-variant-numeric:lining-nums;max-width:var(--gp-text-width)}p{margin:0 0 var(--gp-space-md);max-width:var(--gp-text-width)}p+p{margin-top:calc(-1 * var(--gp-space-sm));text-indent:1.5em}blockquote+p,figure+p,h1+p,h2+p,h3+p,h4+p,hr+p{text-indent:0}p.lead{font-size:1.06rem;text-indent:0}p.drop-cap::first-letter{font-size:3.6em;line-height:.72;float:left;padding-right:.06em;margin-top:.06em;font-style:normal}.small-caps,abbr{font-variant:small-caps;letter-spacing:.06em;font-size:.9em}em{font-style:italic}strong{font-weight:700}sub,sup{font-size:.7em;line-height:0;position:relative;vertical-align:baseline;font-variant-numeric:lining-nums}sup{top:-.5em}sub{bottom:-.25em}a{color:var(--gp-ink);text-decoration:underline;text-decoration-color:var(--gp-light-rule);text-underline-offset:2px;transition:text-decoration-color .15s}a:hover{text-decoration-color:var(--gp-ink)}.marginnote a,.sidenote a,figcaption a{color:var(--gp-margin-ink)}hr{border:none;margin:var(--gp-space-xl) 0;max-width:var(--gp-text-width)}hr::after{content:"· · ·";display:block;text-align:center;color:var(--gp-light-rule);letter-spacing:.5em}.rule-thin{border:none;border-top:.5px solid var(--gp-light-rule);margin:var(--gp-space-md) 0;max-width:var(--gp-text-width)}.lnf,table{font-variant-numeric:lining-nums tabular-nums}.unit{font-size:.82em;color:var(--gp-margin-ink);font-variant-numeric:lining-nums}.datum{font-variant-numeric:lining-nums tabular-nums;font-family:var(--gp-sans);font-size:.9em;letter-spacing:-.01em}.data-label{font-family:var(--gp-sans);font-size:var(--gp-micro);color:var(--gp-margin-ink)}.source-line{font-family:var(--gp-sans);font-size:var(--gp-micro);color:var(--gp-ghost-ink);margin-top:var(--gp-space-xs);max-width:var(--gp-text-width)}.source-line::before{content:"Source: "}ol,ul{padding-left:1.5em;margin:0 0 var(--gp-space-md);max-width:var(--gp-text-width)}li{margin-bottom:var(--gp-space-xs);line-height:var(--gp-line-height)}li>ol,li>ul{margin:var(--gp-space-xs) 0}dl{margin:0 0 var(--gp-space-md);max-width:var(--gp-text-width)}dt{font-variant:small-caps;letter-spacing:.05em;margin-top:var(--gp-space-sm)}dd{margin-left:1.5em;margin-bottom:var(--gp-space-xs);color:var(--gp-margin-ink);font-size:var(--gp-small)}blockquote{font-style:italic;margin:var(--gp-space-md) 0 var(--gp-space-md) 2em;padding:0;border:none;max-width:calc(var(--gp-text-width) - 2em)}blockquote cite,blockquote footer{font-style:normal;font-size:var(--gp-small);color:var(--gp-margin-ink);display:block;margin-top:var(--gp-space-xs)}blockquote footer::before{content:"— "}.epigraph{margin:var(--gp-space-xl) 0 var(--gp-space-xl) 5%;max-width:var(--gp-text-width)}.epigraph>blockquote{font-style:italic;font-size:1.04rem;margin:0;padding:0;border:none}.epigraph>blockquote footer{font-style:normal;font-size:var(--gp-small);color:var(--gp-margin-ink);display:block;margin-top:var(--gp-space-sm)}code,kbd,samp{font-family:var(--gp-mono);font-size:.84em;background:var(--gp-code-bg);padding:.06em .28em;border-radius:2px;font-variant-numeric:lining-nums;transition:background-color .25s}pre{background:var(--gp-code-bg);padding:var(--gp-space-md);overflow-x:auto;margin:var(--gp-space-md) 0;border-left:2px solid var(--gp-light-rule);max-width:var(--gp-text-width);transition:background-color .25s,border-color .25s}pre code{background:0 0;padding:0;font-size:var(--gp-small);line-height:1.5}.new-thought{font-variant:small-caps;letter-spacing:.08em}.callout{font-size:var(--gp-small);color:var(--gp-margin-ink);font-style:italic;padding-left:1em;border-left:1px solid var(--gp-light-rule);margin:var(--gp-space-sm) 0;max-width:var(--gp-text-width)}details.data-note{font-size:var(--gp-small);color:var(--gp-margin-ink);margin:var(--gp-space-sm) 0;border-left:1px solid var(--gp-light-rule);padding-left:var(--gp-space-sm);max-width:var(--gp-text-width)}details.data-note summary{cursor:pointer;font-family:var(--gp-sans);font-size:var(--gp-micro);letter-spacing:.08em;text-transform:uppercase;color:var(--gp-ghost-ink);list-style:none;padding:var(--gp-space-xs) 0;transition:color .15s;user-select:none}details.data-note summary::-webkit-details-marker{display:none}details.data-note summary::before{content:"▸ ";font-size:.8em}details.data-note[open] summary::before{content:"▾ "}details.data-note summary:hover{color:var(--gp-margin-ink)}.bibliography{margin:var(--gp-space-lg) 0;max-width:var(--gp-text-width)}.bibliography ol,.bibliography ul{padding-left:0;list-style:none}.bibliography li{font-size:var(--gp-small);padding-left:2em;text-indent:-2em;margin-bottom:var(--gp-space-sm);color:var(--gp-margin-ink);line-height:1.5}.bibliography .title{font-style:italic}}@layer gp.layout{article{position:relative;max-width:var(--gp-page-width);margin:0 auto;padding:var(--gp-space-xl) var(--gp-outer-margin)}section{padding-top:var(--gp-space-lg)}.running-header{font-family:var(--gp-sans);font-size:var(--gp-micro);letter-spacing:.12em;text-transform:uppercase;color:var(--gp-ghost-ink);max-width:var(--gp-page-width);display:flex;justify-content:space-between;border-bottom:.5px solid var(--gp-light-rule);padding-bottom:var(--gp-space-sm);margin-bottom:var(--gp-space-xl);transition:border-color .25s,color .25s}.figure-compare{display:grid;grid-template-columns:1fr 1fr;gap:var(--gp-space-md);max-width:var(--gp-text-width);margin:var(--gp-space-lg) 0;align-items:start}.figure-compare.figure-compare-full{max-width:var(--gp-page-width)}.figure-compare figure{margin:0;max-width:none}.figure-compare figcaption{float:none!important;width:auto!important;margin-right:0!important;margin-top:var(--gp-space-xs)}.compare-wrap{display:grid;grid-template-columns:1fr 1fr;gap:var(--gp-space-lg);max-width:var(--gp-text-width);margin:var(--gp-space-lg) 0;border-top:.75px solid var(--gp-rule);padding-top:var(--gp-space-md)}.compare-wrap.compare-wrap-full{max-width:var(--gp-page-width)}.compare-col{font-size:var(--gp-small)}.compare-col__header{font-family:var(--gp-sans);font-size:var(--gp-micro);letter-spacing:.1em;text-transform:uppercase;color:var(--gp-margin-ink);margin-bottom:var(--gp-space-sm);padding-bottom:2px;border-bottom:.5px solid var(--gp-light-rule)}.compare-col.before{color:var(--gp-margin-ink)}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:var(--gp-space-md) var(--gp-space-lg);border-top:1.5px solid var(--gp-ink);padding-top:var(--gp-space-md);margin:var(--gp-space-lg) 0;max-width:var(--gp-text-width);transition:border-color .25s}.evidence{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:var(--gp-space-lg);max-width:var(--gp-page-width);margin:var(--gp-space-lg) 0;align-items:start}.evidence__image{margin:0;max-width:none}.evidence__image img,.evidence__image svg{max-width:100%;height:auto;display:block}.evidence__image figcaption{float:none;width:auto;margin-right:0;margin-top:var(--gp-space-xs);font-size:var(--gp-caption);font-family:var(--gp-sans);color:var(--gp-margin-ink)}.evidence__analysis{font-size:var(--gp-small);line-height:1.6;color:var(--gp-ink);padding-top:.1rem}.evidence__analysis p{max-width:none}.evidence__analysis p+p{text-indent:1.2em}.evidence__caption{grid-column:1/-1;font-family:var(--gp-sans);font-size:var(--gp-caption);color:var(--gp-margin-ink);border-top:.5px solid var(--gp-light-rule);padding-top:var(--gp-space-xs);margin-top:var(--gp-space-xs)}.brief-header{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--gp-space-md) var(--gp-space-lg);align-items:end;max-width:var(--gp-page-width);margin:var(--gp-space-lg) 0;padding-bottom:var(--gp-space-sm);border-bottom:.75px solid var(--gp-rule)}.brief-header__meta{margin:0 0 .4rem;font-family:var(--gp-sans);font-size:.74rem;letter-spacing:.1em;text-transform:uppercase;color:var(--gp-ghost-ink)}.brief-header__title{margin:0;max-width:none;font-size:clamp(1.5rem, 2vw + 1rem, 2.2rem)}.brief-header__dek{margin:.45rem 0 0;max-width:52rem;font-size:var(--gp-small);color:var(--gp-margin-ink);text-indent:0}.brief-header__stat{text-align:right;align-self:start;min-width:12rem}.brief-header__label{display:block;margin-bottom:.2rem;font-family:var(--gp-sans);font-size:.74rem;letter-spacing:.08em;text-transform:uppercase;color:var(--gp-ghost-ink)}.brief-header__value{display:block;font-size:clamp(2rem, 3vw + .7rem, 3.1rem);line-height:.95;color:var(--gp-green);font-style:italic;font-variant-numeric:lining-nums tabular-nums}.brief-header__subvalue{display:block;margin-top:.2rem;font-family:var(--gp-sans);font-size:var(--gp-caption);color:var(--gp-margin-ink)}.brief-backlink{display:inline-block;margin-bottom:var(--gp-space-sm);font-family:var(--gp-sans);font-size:.8rem;letter-spacing:.04em;color:var(--gp-ghost-ink);text-decoration:none}.brief-backlink:hover{color:var(--gp-ink)}.gp-map-block{max-width:var(--gp-page-width);margin:var(--gp-space-lg) 0}.gp-map-frame{position:relative;border:.5px solid var(--gp-light-rule);background:var(--gp-code-bg);min-height:28rem;overflow:hidden;box-shadow:0 10px 30px oklch(from var(--gp-ink) l c h / .08);transition:border-color .25s,background-color .25s,box-shadow .25s}.gp-map{width:100%;min-height:28rem;background:oklch(from var(--gp-paper) calc(l - .02) c h)}.gp-map-panel{position:absolute;left:var(--gp-space-md);top:var(--gp-space-md);z-index:2;width:min(19rem,calc(100% - 2rem));padding:.8rem .9rem;background:oklch(from var(--gp-paper) l c h / .92);border:.5px solid oklch(from var(--gp-rule) l c h / .5);backdrop-filter:blur(10px)}.gp-map-kicker{display:block;margin-bottom:.35rem;font-family:var(--gp-sans);font-size:var(--gp-micro);letter-spacing:.12em;text-transform:uppercase;color:var(--gp-ghost-ink)}.gp-map-title{margin:0 0 .45rem;font-size:1rem;line-height:1.3;color:var(--gp-ink);max-width:none}.gp-map-panel p{margin:0;max-width:none;font-family:var(--gp-sans);font-size:var(--gp-small);line-height:1.45;color:var(--gp-margin-ink);text-indent:0}.gp-map-key{display:flex;flex-wrap:wrap;gap:.5rem .9rem;margin:.7rem 0 0;padding:0;list-style:none}.gp-map-key li{display:inline-flex;align-items:center;gap:.35rem;margin:0;font-family:var(--gp-sans);font-size:var(--gp-micro);letter-spacing:.02em;color:var(--gp-margin-ink)}.gp-map-swatch{width:.72rem;height:.72rem;border-radius:999px;border:1px solid oklch(from var(--gp-paper) calc(l - .18) c h / .55);flex:0 0 auto}.gp-map-swatch.red{background:var(--gp-red)}.gp-map-swatch.blue{background:var(--gp-blue)}.gp-map-swatch.ochre{background:var(--gp-ochre)}.gp-map-meta{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem;margin-top:var(--gp-space-sm);padding-top:var(--gp-space-sm);border-top:.5px solid var(--gp-light-rule);font-family:var(--gp-sans)}.gp-map-stat{font-size:var(--gp-micro);color:var(--gp-ghost-ink);letter-spacing:.06em;text-transform:uppercase}.gp-map-stat strong{display:block;margin-top:.12rem;font-size:1rem;line-height:1.2;letter-spacing:normal;text-transform:none;color:var(--gp-ink);font-weight:400;font-variant-numeric:lining-nums tabular-nums}.gp-map-frame .maplibregl-ctrl-group{border-radius:0;box-shadow:none;border:.5px solid var(--gp-light-rule);background:oklch(from var(--gp-paper) l c h / .9)}.gp-map-frame .maplibregl-ctrl button .maplibregl-ctrl-icon{filter:grayscale(1)}.gp-map-frame .maplibregl-popup-content{border-radius:0;padding:.55rem .65rem;font-family:var(--gp-sans);font-size:var(--gp-small);color:var(--gp-ink);background:oklch(from var(--gp-paper) l c h / .96);box-shadow:0 6px 20px oklch(from var(--gp-ink) l c h / .12)}.gp-map-frame .maplibregl-popup-tip{border-top-color:oklch(from var(--gp-paper) l c h / .96)}}@layer gp.components{.sidenote-number{counter-increment:sidenote-counter}.sidenote-number::after,.sidenote::before{content:counter(sidenote-counter);font-size:.68rem;vertical-align:super;line-height:0;font-variant-numeric:lining-nums}.sidenote-number::after{color:var(--gp-margin-ink);padding-left:1px}.sidenote::before{color:var(--gp-margin-ink);padding-right:4px}input.sidenote-toggle{display:none}.marginnote,.sidenote{float:right;clear:right;margin-right:calc(-1 * (var(--gp-margin-width) + var(--gp-gutter)));width:var(--gp-margin-width);font-size:var(--gp-small);line-height:1.5;color:var(--gp-margin-ink);font-style:normal;vertical-align:baseline;position:sticky;top:2rem;padding-top:.08rem;transition:color .25s}.marginnote img,.marginnote svg{max-width:100%;height:auto;display:block;margin-bottom:var(--gp-space-xs)}.marginnote svg{overflow:visible}.marginnote-label{font-family:var(--gp-sans);font-size:var(--gp-micro);letter-spacing:.1em;text-transform:uppercase;color:var(--gp-ghost-ink);display:block;margin-bottom:2px}label.sidenote-toggle{display:none;cursor:pointer}label.sidenote-number{display:inline}.section-marker{float:right;clear:right;margin-right:calc(-1 * (var(--gp-margin-width) + var(--gp-gutter)));width:var(--gp-margin-width);font-family:var(--gp-sans);font-size:var(--gp-micro);letter-spacing:.1em;text-transform:uppercase;color:var(--gp-ghost-ink);padding-top:.2rem;position:sticky;top:2rem}figure{max-width:var(--gp-text-width);margin:var(--gp-space-lg) 0;padding:0}figure canvas,figure img,figure svg{max-width:100%;height:auto;display:block}figure.figure-full{max-width:var(--gp-page-width)}figure.figure-margin{float:right;clear:right;margin-right:calc(-1 * (var(--gp-margin-width) + var(--gp-gutter)));width:var(--gp-margin-width);margin-top:0;margin-bottom:var(--gp-space-md)}figcaption{font-size:var(--gp-caption);font-family:var(--gp-sans);font-optical-sizing:auto;line-height:1.45;color:var(--gp-margin-ink);margin-top:var(--gp-space-xs);transition:color .25s}figure:not(.figure-margin):not(.figure-full):not(.evidence__image) figcaption{float:right;clear:right;margin-right:calc(-1 * (var(--gp-margin-width) + var(--gp-gutter)));width:var(--gp-margin-width);margin-top:0}figure.figure-full figcaption{float:right;width:var(--gp-margin-width);margin-top:var(--gp-space-xs)}figure.figure-margin figcaption{float:none;width:auto;font-size:.71em}table{max-width:var(--gp-text-width);width:100%;border-collapse:collapse;font-family:var(--gp-sans);font-size:var(--gp-small);font-variant-numeric:lining-nums tabular-nums;margin:var(--gp-space-lg) 0;line-height:1.4;transition:color .25s}thead{border-top:1.5px solid var(--gp-ink);border-bottom:.75px solid var(--gp-ink)}tbody tr:last-child td{border-bottom:1.5px solid var(--gp-ink);padding-bottom:var(--gp-space-sm)}tbody tr.midrule td{border-top:.75px solid var(--gp-rule);padding-top:var(--gp-space-sm)}tbody tr.midrule-above td{padding-bottom:var(--gp-space-sm)}th{font-weight:400;font-variant:small-caps;letter-spacing:.06em;text-align:left;padding:var(--gp-space-xs) var(--gp-space-sm);vertical-align:bottom}td{padding:var(--gp-space-xs) var(--gp-space-sm);vertical-align:top}td.num,th.num{text-align:right}td.neg{color:var(--gp-red)}td.pos{color:var(--gp-green)}tr.highlight td{background:var(--gp-code-bg);font-style:italic}.table-dense td,.table-dense th{padding:2px var(--gp-space-xs);font-size:var(--gp-micro)}table.table-full{max-width:var(--gp-page-width)}table.table-striped tbody tr:nth-child(2n) td{background:oklch(from var(--gp-paper) calc(l - .02) c h)}caption{font-size:var(--gp-caption);font-family:var(--gp-sans);color:var(--gp-margin-ink);text-align:left;caption-side:top;padding-bottom:var(--gp-space-xs)}.sparkline{display:inline-block;vertical-align:middle;line-height:1;position:relative;top:-1px}.sparkline svg{overflow:visible}@media (prefers-reduced-motion:no-preference){.sp-draw{stroke-dasharray:300;stroke-dashoffset:300;animation:gp-draw .9s var(--gp-ease-out) forwards}@keyframes gp-draw{to{stroke-dashoffset:0}}}table.sparkline-table{font-family:var(--gp-sans);font-size:var(--gp-small)}table.sparkline-table .sp-cell{padding-top:2px;padding-bottom:2px}table.sparkline-table .sp-cell svg{display:block;overflow:visible}.small-multiples{max-width:var(--gp-page-width);display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:var(--gp-space-md);margin:var(--gp-space-lg) 0}.small-multiples-3{grid-template-columns:repeat(3,1fr)}.small-multiples-4{grid-template-columns:repeat(4,1fr)}.small-multiples-6{grid-template-columns:repeat(6,1fr)}.small-multiples figure{margin:0;max-width:none}.small-multiples figure figcaption{float:none!important;width:auto!important;margin-right:0!important;margin-top:var(--gp-space-xs);font-size:.7em}.small-multiples-xlabel{grid-column:1/-1;font-family:var(--gp-sans);font-size:var(--gp-micro);color:var(--gp-margin-ink);text-align:center;margin-top:calc(-1 * var(--gp-space-sm))}.pull-stat{margin:var(--gp-space-lg) 0;max-width:var(--gp-text-width)}.pull-stat__number{font-size:clamp(2.4rem, 4vw + 1rem, 3.5rem);line-height:1;font-style:italic;font-weight:400;display:block;font-variant-numeric:lining-nums}.pull-stat__label{font-family:var(--gp-sans);font-size:var(--gp-small);color:var(--gp-margin-ink);letter-spacing:.04em;display:block;margin-top:.2em}.pull-stat__context{font-size:var(--gp-small);color:var(--gp-ghost-ink);font-style:italic;display:block}.pull-quote{font-size:clamp(1.2rem, 2vw + .6rem, 1.45rem);font-style:italic;line-height:1.35;margin:var(--gp-space-lg) 0;max-width:var(--gp-text-width)}.metric-strip{max-width:var(--gp-page-width);display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:0;border-top:.75px solid var(--gp-rule);border-bottom:.75px solid var(--gp-rule);margin:var(--gp-space-md) 0}.metric-strip__item{padding:.55rem .8rem .5rem 0;font-family:var(--gp-sans)}.metric-strip__label{display:block;font-size:.74rem;letter-spacing:.08em;text-transform:uppercase;color:var(--gp-ghost-ink)}.metric-strip__value{display:block;margin-top:.14rem;font-size:1.05rem;color:var(--gp-ink);font-style:italic;font-variant-numeric:lining-nums tabular-nums}.metric-strip__value.green{color:var(--gp-green)}.metric-strip__value.red{color:var(--gp-red)}.metric-strip__value.blue{color:var(--gp-blue)}.tab-nav{max-width:var(--gp-page-width);display:flex;flex-wrap:wrap;gap:.1rem .9rem;margin:0 0 var(--gp-space-md);padding:0 0 var(--gp-space-xs);border-bottom:.5px solid var(--gp-light-rule);list-style:none}.tab-nav li{margin:0}.tab-nav a,.tab-nav button{display:inline-block;padding:.32rem 0;border:0;border-bottom:1.5px solid transparent;background:0 0;font-family:var(--gp-sans);font-size:.76rem;letter-spacing:.08em;text-transform:uppercase;color:var(--gp-ghost-ink);text-decoration:none;cursor:pointer}.tab-nav .is-active,.tab-nav a[aria-current=page],.tab-nav button[aria-selected=true]{color:var(--gp-ink);border-bottom-color:var(--gp-ink)}.tab-nav.tab-nav--filled{gap:.25rem .55rem;border-bottom-color:var(--gp-rule)}.tab-nav.tab-nav--filled a,.tab-nav.tab-nav--filled button{padding:.45rem .8rem;border-bottom-width:0;color:var(--gp-margin-ink)}.tab-nav.tab-nav--filled .is-active,.tab-nav.tab-nav--filled a[aria-current=page],.tab-nav.tab-nav--filled button[aria-selected=true]{background:var(--gp-ink);color:var(--gp-paper)}.analytic-grid{max-width:var(--gp-page-width);display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--gp-space-sm);margin:var(--gp-space-md) 0}.analytic-card{position:relative;min-height:8.5rem;padding:.75rem .8rem .7rem;border:.5px solid var(--gp-light-rule);background:linear-gradient(180deg,oklch(from var(--gp-paper) calc(l - .005) c h),oklch(from var(--gp-paper) calc(l - .018) c h));box-shadow:inset 0 1px 0 oklch(from var(--gp-paper) calc(l - .001) c h / .9)}.analytic-card::before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:var(--gp-ghost-ink)}.analytic-card.red::before{background:var(--gp-red)}.analytic-card.blue::before{background:var(--gp-blue)}.analytic-card.green::before{background:var(--gp-green)}.analytic-card.ochre::before{background:var(--gp-ochre)}.analytic-card__eyebrow{display:block;margin:0 0 .25rem;padding-left:.35rem;font-family:var(--gp-sans);font-size:.74rem;letter-spacing:.08em;text-transform:uppercase;color:var(--gp-ghost-ink)}.analytic-card__title{margin:0;padding-left:.35rem;max-width:none;font-size:.98rem;line-height:1.25}.analytic-card__value{display:block;margin:.5rem 0 .18rem;padding-left:.35rem;font-size:1.35rem;line-height:1;color:var(--gp-ink);font-style:italic;font-variant-numeric:lining-nums tabular-nums}.analytic-card__meta{display:block;padding-left:.35rem;font-family:var(--gp-sans);font-size:var(--gp-caption);color:var(--gp-margin-ink)}.algorithm-panel{max-width:var(--gp-text-width);margin:var(--gp-space-lg) 0;border:.5px solid var(--gp-light-rule);background:var(--gp-code-bg);padding:var(--gp-space-md)}.algorithm-panel__title{margin:0 0 .55rem;font-family:var(--gp-sans);font-size:.74rem;letter-spacing:.1em;text-transform:uppercase;color:var(--gp-ghost-ink)}.algorithm-panel pre{margin:0;max-width:none;border-left:0;padding:0;background:0 0}.activity-timeline{max-width:var(--gp-page-width);margin:var(--gp-space-lg) 0;padding-top:var(--gp-space-xs);border-top:.5px solid var(--gp-light-rule)}.activity-timeline__header{display:flex;justify-content:space-between;gap:var(--gp-space-sm);margin-bottom:var(--gp-space-sm);font-family:var(--gp-sans);font-size:.74rem;color:var(--gp-ghost-ink)}.activity-timeline__lane{display:grid;grid-template-columns:92px 1fr auto;align-items:center;gap:var(--gp-space-sm);margin-bottom:.45rem;font-family:var(--gp-sans);font-size:var(--gp-small)}.activity-timeline__label{color:var(--gp-margin-ink);text-align:right;white-space:nowrap}.activity-timeline__track{position:relative;height:.85rem;background:oklch(from var(--gp-paper) calc(l - .05) c h);overflow:hidden}.activity-timeline__span{position:absolute;left:var(--at-start,0);width:var(--at-width,50%);height:100%;background:var(--gp-ghost-ink)}.activity-timeline__span.red{background:var(--gp-red)}.activity-timeline__span.blue{background:var(--gp-blue)}.activity-timeline__span.green{background:var(--gp-green)}.activity-timeline__span.ochre{background:var(--gp-ochre)}.activity-timeline__value{color:var(--gp-ghost-ink);font-size:.74rem;white-space:nowrap}.gp-app-shell{min-height:100dvh;display:flex;flex-direction:column;background:var(--gp-paper);color:var(--gp-ink)}.gp-app-header{position:sticky;top:0;z-index:50;border-bottom:.5px solid var(--gp-light-rule);background:oklch(from var(--gp-paper) l c h / .94);backdrop-filter:blur(16px)}.gp-app-footer__inner,.gp-app-header__inner,.gp-app-main{width:min(100%,100rem);margin:0 auto;padding-left:1.5rem;padding-right:1.5rem}.gp-app-header__inner{min-height:4rem;display:flex;align-items:center;justify-content:space-between;gap:1rem}.gp-app-brand{display:flex;align-items:center;gap:.75rem;min-width:0;font-family:var(--gp-sans)}.gp-app-brand__mark{width:1.7rem;height:1.7rem;color:var(--gp-ink);flex:0 0 auto}.gp-app-brand__title{font-size:1rem;letter-spacing:-.02em;color:var(--gp-ink);font-weight:600;white-space:nowrap}.gp-app-brand__meta{font-size:.75rem;color:var(--gp-ghost-ink);white-space:nowrap}.gp-app-status{display:inline-flex;align-items:center;gap:.4rem;font-family:var(--gp-sans);font-size:.78rem;color:var(--gp-margin-ink);white-space:nowrap}.gp-app-status::before{content:"";width:.42rem;height:.42rem;border-radius:999px;background:#79d8b9;box-shadow:0 0 0 .2rem oklch(82% .06 165 / .22)}.gp-app-main{flex:1;width:min(100%,100rem);padding-top:1.35rem;padding-bottom:1.5rem}.gp-app-frame{border-top:.5px solid var(--gp-light-rule);padding-top:1rem}.gp-app-footer{margin-top:auto;border-top:.5px solid var(--gp-light-rule)}.gp-app-footer__inner{min-height:2.85rem;display:flex;align-items:center;justify-content:space-between;gap:1rem;font-family:var(--gp-sans);font-size:.76rem;color:var(--gp-margin-ink)}.gp-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.7rem;margin:.9rem 0 1rem}.gp-toolbar__group{display:inline-flex;align-items:center;flex-wrap:wrap;gap:.4rem}.gp-toolbar__meta{margin-left:auto;display:inline-flex;align-items:center;gap:1rem;font-family:var(--gp-sans);font-size:.8rem;color:var(--gp-margin-ink)}.gp-btn,.gp-chip,.gp-segmented button{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;min-height:2.15rem;padding:.45rem .85rem;border:.5px solid var(--gp-light-rule);background:0 0;color:var(--gp-margin-ink);font-family:var(--gp-sans);font-size:.8rem;font-weight:500;letter-spacing:.01em;text-decoration:none;cursor:pointer;transition:color .16s,background-color .16s,border-color .16s,box-shadow .16s}.gp-btn:hover,.gp-chip:hover,.gp-segmented button:hover{color:var(--gp-ink);border-color:var(--gp-rule);background:oklch(from var(--gp-paper) calc(l - .02) c h)}.gp-btn:disabled,.gp-chip:disabled,.gp-segmented button:disabled{opacity:.45;cursor:default}.gp-btn--primary,.gp-segmented .is-active{background:var(--gp-ink);border-color:var(--gp-ink);color:var(--gp-paper)}.gp-btn--primary:hover,.gp-segmented .is-active:hover{background:oklch(from var(--gp-ink) calc(l + .06) c h);border-color:oklch(from var(--gp-ink) calc(l + .06) c h);color:var(--gp-paper)}.gp-btn--soft{background:oklch(from var(--gp-paper) calc(l - .02) c h)}.gp-btn--sm,.gp-chip{min-height:1.95rem;padding:.3rem .7rem;font-size:.78rem}.gp-btn--pill,.gp-chip,.gp-segmented button{border-radius:999px}.gp-segmented{display:inline-flex;align-items:center;flex-wrap:wrap;gap:.35rem}.gp-input{min-height:2.2rem;min-width:min(18rem,100%);padding:.48rem .8rem;border:.5px solid var(--gp-light-rule);background:oklch(from var(--gp-paper) calc(l - .01) c h);color:var(--gp-ink);font-family:var(--gp-sans);font-size:.86rem;outline:0;transition:border-color .16s,box-shadow .16s,background-color .16s}.gp-input::placeholder{color:var(--gp-ghost-ink)}.gp-input:focus{border-color:var(--gp-rule);box-shadow:0 0 0 3px oklch(from var(--gp-blue) l c h / .08)}.gp-badge{display:inline-flex;align-items:center;gap:.35rem;padding:.18rem .5rem;border:.5px solid var(--gp-light-rule);font-family:var(--gp-sans);font-size:.68rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--gp-margin-ink);background:oklch(from var(--gp-paper) calc(l - .02) c h)}.gp-badge::before{content:"";width:.38rem;height:.38rem;border-radius:999px;background:currentColor;opacity:.55}.gp-badge--live{color:var(--gp-green);background:oklch(from var(--gp-green) 95% .03 h / .22);border-color:oklch(from var(--gp-green) 86% .03 h / .42)}.gp-badge--venue-blue{color:var(--gp-blue)}.gp-badge--venue-red{color:var(--gp-red)}.gp-badge--venue-ochre{color:var(--gp-ochre)}.gp-badge--quiet::before{display:none}.gp-panel{border:.5px solid var(--gp-light-rule);background:oklch(from var(--gp-paper) calc(l - .006) c h)}.gp-panel__header{display:flex;align-items:center;justify-content:space-between;gap:.8rem;padding:.9rem 1rem;border-bottom:.5px solid var(--gp-light-rule)}.gp-panel__title{margin:0;max-width:none;font-size:.98rem;line-height:1.2;font-style:normal;font-family:var(--gp-sans);color:var(--gp-ink)}.gp-panel__meta{font-family:var(--gp-sans);font-size:.8rem;color:var(--gp-margin-ink)}.gp-panel__body{padding:1rem}.gp-panel__body>:first-child{margin-top:0}.gp-panel__body>:last-child{margin-bottom:0}.gp-kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));gap:.75rem;margin:0 0 1rem}.gp-kpi{border:.5px solid var(--gp-light-rule);background:oklch(from var(--gp-paper) calc(l - .008) c h);padding:.8rem .9rem}.gp-kpi__label{display:block;font-family:var(--gp-sans);font-size:.74rem;letter-spacing:.08em;text-transform:uppercase;color:var(--gp-ghost-ink)}.gp-kpi__value{display:block;margin-top:.25rem;font-family:var(--gp-sans);font-size:1.25rem;line-height:1.05;color:var(--gp-ink);font-weight:600;font-variant-numeric:lining-nums tabular-nums}.gp-kpi__sub{display:block;margin-top:.2rem;font-family:var(--gp-sans);font-size:.8rem;color:var(--gp-margin-ink)}.gp-kpi__value.red{color:var(--gp-red)}.gp-kpi__value.green{color:var(--gp-green)}.gp-kpi__value.blue{color:var(--gp-blue)}.gp-data-table{width:100%;max-width:none;margin:0;font-size:.86rem;line-height:1.5}.gp-data-table thead{border-top:0;border-bottom:.5px solid var(--gp-light-rule)}.gp-data-table thead th{font-size:.76rem;color:var(--gp-ghost-ink);letter-spacing:.08em}.gp-data-table tbody tr:last-child td{border-bottom:0;padding-bottom:var(--gp-space-xs)}.gp-data-table tbody tr+tr td{border-top:.5px solid oklch(from var(--gp-light-rule) l c h / .5)}.gp-data-table tbody tr:hover td{background:oklch(from var(--gp-paper) calc(l - .02) c h)}.gp-data-table td{padding-top:.55rem;padding-bottom:.55rem}.gp-data-table__wrap{overflow:auto}.gp-data-table__wrap.sticky-head thead th{position:sticky;top:0;z-index:1;background:oklch(from var(--gp-paper) calc(l - .005) c h)}.gp-card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));gap:.9rem}.gp-card{border:.5px solid var(--gp-light-rule);background:oklch(from var(--gp-paper) calc(l - .007) c h);padding:1rem}.gp-card__eyebrow{display:block;font-family:var(--gp-sans);font-size:.74rem;letter-spacing:.08em;text-transform:uppercase;color:var(--gp-ghost-ink)}.gp-card__title{margin:.2rem 0 0;max-width:none;font-family:var(--gp-sans);font-size:1rem;line-height:1.25;color:var(--gp-ink)}.gp-card__meta{margin-top:.45rem;font-family:var(--gp-sans);font-size:.82rem;color:var(--gp-margin-ink)}.gp-progress{position:relative;width:100%;height:.4rem;overflow:hidden;background:oklch(from var(--gp-paper) calc(l - .05) c h)}.gp-progress__bar{width:var(--gp-progress,0%);height:100%;background:var(--gp-ink)}.gp-legend{display:flex;flex-wrap:wrap;align-items:center;gap:.7rem 1rem;font-family:var(--gp-sans);font-size:.78rem;color:var(--gp-margin-ink)}.gp-legend__item{display:inline-flex;align-items:center;gap:.4rem}.gp-legend__swatch{width:.62rem;height:.62rem;border-radius:999px;flex:0 0 auto;background:var(--gp-ghost-ink)}.gp-note{font-family:var(--gp-sans);font-size:.82rem;color:var(--gp-margin-ink);line-height:1.55}.gp-link-list{display:grid;gap:.5rem}.gp-link-card{display:flex;align-items:center;gap:.75rem;width:100%;padding:.95rem 1rem;border:.5px solid var(--gp-light-rule);background:oklch(from var(--gp-paper) calc(l - .005) c h);color:inherit;text-decoration:none;transition:background-color .16s,border-color .16s,color .16s}.gp-link-card:hover{background:oklch(from var(--gp-paper) calc(l - .018) c h);border-color:var(--gp-rule);color:inherit}.gp-link-card__marker{width:.72rem;height:.72rem;border-radius:999px;flex:0 0 auto;opacity:.9}.gp-link-card__title{font-family:var(--gp-sans);font-size:.92rem;color:var(--gp-ink)}.gp-link-card__meta{font-family:var(--gp-sans);font-size:.75rem;color:var(--gp-margin-ink)}.gp-link-card__trail{margin-left:auto;font-family:var(--gp-sans);font-size:.72rem;color:var(--gp-ghost-ink)}.gp-state{display:flex;align-items:center;justify-content:center;gap:.8rem;min-height:16rem;font-family:var(--gp-sans);font-size:.9rem;color:var(--gp-margin-ink)}.gp-state--compact{min-height:8rem}.gp-spinner{width:1.6rem;height:1.6rem;border-radius:999px;border:2px solid oklch(from var(--gp-ink) l c h / .14);border-top-color:var(--gp-ink);animation:gp-spin .85s linear infinite}@keyframes gp-spin{to{transform:rotate(360deg)}}.bar-chart{list-style:none;padding:0;margin:var(--gp-space-lg) 0;max-width:var(--gp-text-width)}.bar-chart li{display:grid;grid-template-columns:160px 1fr auto;align-items:center;gap:var(--gp-space-sm);margin-bottom:var(--gp-space-xs);font-family:var(--gp-sans);font-size:var(--gp-small)}.bar-label{text-align:right;color:var(--gp-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bar{position:relative;height:1px;background:var(--gp-ghost-ink)}.bar::after{content:"";position:absolute;left:var(--bar-value,50%);top:-3px;width:1px;height:7px;background:var(--gp-ink)}.bar-chart.filled .bar{height:8px;background:0 0}.bar-chart.filled .bar::before{content:"";position:absolute;left:0;top:0;height:100%;width:var(--bar-value,0%);background:var(--gp-gray-data)}.bar-chart.filled .bar::after{display:none}.bar-value{color:var(--gp-margin-ink);white-space:nowrap;font-variant-numeric:tabular-nums lining-nums}.bar-chart.filled .bar.red::before,.bar.red::after{background:var(--gp-red)}.bar-chart.filled .bar.blue::before,.bar.blue::after{background:var(--gp-blue)}.bar-chart.filled .bar.green::before,.bar.green::after{background:var(--gp-green)}.bar-chart.filled .bar.ochre::before,.bar.ochre::after{background:var(--gp-ochre)}.ghost{opacity:.22}.near-ghost{opacity:.4}.focal{opacity:1}}@layer gp.dataviz{.dot-chart{list-style:none;padding:0;margin:var(--gp-space-lg) 0;max-width:var(--gp-text-width)}.dot-chart li{display:grid;grid-template-columns:160px 1fr auto;align-items:center;gap:var(--gp-space-sm);margin-bottom:var(--gp-space-xs);font-family:var(--gp-sans);font-size:var(--gp-small)}.dc-label{text-align:right;color:var(--gp-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dc-track{position:relative;height:1px;background:var(--gp-light-rule)}.dc-dot{position:absolute;left:var(--dc-pos,50%);top:50%;transform:translate(-50%,-50%);width:6px;height:6px;border-radius:50%;background:var(--gp-ink);transition:background .25s}.dc-dot.red{background:var(--gp-red)}.dc-dot.blue{background:var(--gp-blue)}.dc-dot.green{background:var(--gp-green)}.dc-dot.open{background:var(--gp-paper);border:1.5px solid var(--gp-ink)}.dc-value{color:var(--gp-margin-ink);font-variant-numeric:tabular-nums lining-nums}.dumbbell{list-style:none;padding:0;margin:var(--gp-space-lg) 0;max-width:var(--gp-text-width)}.dumbbell li{display:grid;grid-template-columns:160px 1fr auto;align-items:center;gap:var(--gp-space-sm);margin-bottom:var(--gp-space-sm);font-family:var(--gp-sans);font-size:var(--gp-small)}.db-label{text-align:right;color:var(--gp-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.db-track{position:relative;height:1px}.db-track::before{content:"";position:absolute;top:0;left:var(--db-l,30%);right:calc(100% - var(--db-r,70%));height:1px;background:var(--gp-ghost-ink)}.db-dot{position:absolute;top:50%;width:8px;height:8px;border-radius:50%}.db-dot--left{left:var(--db-l,30%);transform:translate(-50%,-50%);background:var(--gp-blue)}.db-dot--right{left:var(--db-r,70%);transform:translate(-50%,-50%);background:var(--gp-red)}.db-value{color:var(--gp-margin-ink);font-size:var(--gp-micro);white-space:nowrap;font-variant-numeric:lining-nums}.strip-plot{list-style:none;padding:0;margin:var(--gp-space-lg) 0;max-width:var(--gp-text-width)}.strip-plot li{display:grid;grid-template-columns:160px 1fr;align-items:center;gap:var(--gp-space-sm);margin-bottom:10px;font-family:var(--gp-sans);font-size:var(--gp-small)}.sp-label{text-align:right;color:var(--gp-ink);white-space:nowrap}.sp-track{position:relative;height:1px;background:var(--gp-light-rule)}.sp-dot{position:absolute;left:var(--sp-pos,50%);top:50%;transform:translate(-50%,-50%);width:5px;height:5px;border-radius:50%;background:var(--gp-ink);opacity:.65}.sp-dot.red{background:var(--gp-red)}.sp-dot.blue{background:var(--gp-blue)}.sp-dot.green{background:var(--gp-green)}.sp-axis-labels{display:flex;justify-content:space-between;margin-left:calc(160px + var(--gp-space-sm));font-family:var(--gp-sans);font-size:var(--gp-micro);color:var(--gp-margin-ink);margin-top:4px;font-variant-numeric:lining-nums}table.stem-leaf{font-family:var(--gp-mono);font-size:var(--gp-small);font-variant-numeric:lining-nums tabular-nums;max-width:var(--gp-text-width);margin:var(--gp-space-lg) 0;line-height:1.9;border-collapse:collapse;width:100%;border:none}table.stem-leaf thead{border-bottom:.75px solid var(--gp-rule)}table.stem-leaf thead th{font-family:var(--gp-sans);font-size:var(--gp-micro);letter-spacing:.06em;text-transform:uppercase;color:var(--gp-ghost-ink);font-weight:400;padding-bottom:3px}table.stem-leaf .sl-col-left{width:43%;text-align:right;padding-right:8px;color:var(--gp-blue)}table.stem-leaf .sl-col-stem{width:14%;text-align:center;color:var(--gp-margin-ink);border-left:.5px solid var(--gp-rule);border-right:.5px solid var(--gp-rule);padding:0 4px}table.stem-leaf thead .sl-col-stem{color:var(--gp-margin-ink)}table.stem-leaf .sl-col-right{width:43%;text-align:left;padding-left:8px}.sl-unit{font-family:var(--gp-sans);font-size:var(--gp-micro);color:var(--gp-ghost-ink);margin-top:var(--gp-space-xs)}.bullet-graphs{max-width:var(--gp-text-width);margin:var(--gp-space-lg) 0;display:flex;flex-direction:column;gap:var(--gp-space-md)}.bullet-graph{display:grid;grid-template-columns:140px 1fr auto;align-items:center;gap:var(--gp-space-sm);font-family:var(--gp-sans);font-size:var(--gp-small)}.bg-label{text-align:right;color:var(--gp-ink)}.bg-track{position:relative;height:16px;background:0 0}.bg-range{position:absolute;top:0;height:100%;display:inline-block}.bg-range-1{left:0;background:var(--gp-ghost-ink);opacity:.35}.bg-range-2{left:33%;background:var(--gp-ghost-ink);opacity:.22}.bg-range-3{left:66%;background:var(--gp-ghost-ink);opacity:.12}.bg-bar{position:absolute;left:0;top:25%;height:50%;background:var(--gp-ink);z-index:2;transition:background .25s}.bg-bar.red{background:var(--gp-red)}.bg-bar.blue{background:var(--gp-blue)}.bg-bar.green{background:var(--gp-green)}.bg-target{position:absolute;top:10%;height:80%;width:2px;background:var(--gp-ink);z-index:3;transform:translateX(-50%)}.bg-value{color:var(--gp-margin-ink);font-variant-numeric:tabular-nums lining-nums}.bg-axis{margin-left:calc(140px + var(--gp-space-sm));display:flex;justify-content:space-between;font-family:var(--gp-sans);font-size:var(--gp-micro);color:var(--gp-ghost-ink);border-top:.5px solid var(--gp-light-rule);padding-top:2px}.heat-table td.heat{color:var(--gp-ink);transition:background .2s;text-align:right}.heat-table td.heat[data-dark]{color:oklch(93% .005 85)}.heat-table td.heat-div{text-align:right;transition:background .2s}table.ranked-table td.rank{color:var(--gp-ghost-ink);text-align:right;padding-right:var(--gp-space-sm);font-variant-numeric:lining-nums tabular-nums;width:2em}table.ranked-table td.rank-label{background-image:radial-gradient(circle,var(--gp-light-rule) 1px,transparent 1px);background-size:6px 1px;background-position:0 .9em;background-repeat:repeat-x;padding-right:var(--gp-space-sm)}table.ranked-table td.rank-label span{background:var(--gp-paper);padding-right:4px;transition:background .25s}table.ranked-table td.rank-value{font-variant-numeric:tabular-nums lining-nums;text-align:right}table.ranked-table tr.rank-highlight td.rank-label,table.ranked-table tr.rank-highlight td.rank-label span{font-style:italic}.timeline{max-width:var(--gp-text-width);margin:var(--gp-space-lg) 0;font-family:var(--gp-sans);font-size:var(--gp-small)}.tl-track{position:relative;height:48px;border-bottom:1px solid var(--gp-ink)}.tl-event{position:absolute;left:var(--tl-pos,50%);bottom:0;transform:translateX(-50%);display:flex;flex-direction:column-reverse;align-items:center}.tl-event::after{content:"";display:block;width:6px;height:6px;border-radius:50%;background:var(--gp-ink)}.tl-event-label{font-size:var(--gp-micro);color:var(--gp-ink);white-space:nowrap;margin-bottom:4px;text-align:center}.tl-period{position:absolute;bottom:4px;left:var(--tl-start,0);right:calc(100% - var(--tl-end,50%));height:8px;background:var(--gp-ghost-ink);opacity:.4}.tl-period-label{position:absolute;top:-18px;left:0;font-size:var(--gp-micro);color:var(--gp-margin-ink);white-space:nowrap}.tl-period.red{background:var(--gp-red);opacity:.5}.tl-period.blue{background:var(--gp-blue);opacity:.5}.tl-period.green{background:var(--gp-green);opacity:.5}.tl-period.ochre{background:var(--gp-ochre);opacity:.5}.tl-axis{display:flex;justify-content:space-between;margin-top:4px;font-size:var(--gp-micro);color:var(--gp-margin-ink);font-variant-numeric:lining-nums}.tl-axis span::before{content:"";display:block;width:1px;height:4px;background:var(--gp-rule);margin:0 auto 2px}.slopegraph-wrap{max-width:var(--gp-text-width);margin:var(--gp-space-lg) 0}.parallel-coords{max-width:var(--gp-page-width);margin:var(--gp-space-lg) 0;overflow-x:auto}.parallel-coords svg{display:block;overflow:visible}.pc-line{fill:none;stroke:var(--gp-ghost-ink);stroke-width:.75;opacity:.5}.pc-line.highlight{stroke:var(--gp-red);stroke-width:1.5;opacity:1}.pc-line.blue-hl{stroke:var(--gp-blue);stroke-width:1.5;opacity:1}.pc-axis{stroke:var(--gp-rule);stroke-width:.75}.ann-line{stroke:var(--gp-ghost-ink);stroke-width:.6;fill:none}.ann-text{font-family:var(--gp-sans);font-size:8px;fill:var(--gp-margin-ink);font-style:italic}.ref-band{fill:var(--gp-ghost-ink);fill-opacity:0.10;stroke:none}.ref-line{stroke:var(--gp-rule);stroke-width:.75;stroke-dasharray:2 4;fill:none}.zero-line{stroke:var(--gp-rule);stroke-width:.75;stroke-dasharray:2 4;fill:none}}@layer gp.utilities{.gp-red{color:var(--gp-red)}.gp-blue{color:var(--gp-blue)}.gp-green{color:var(--gp-green)}.gp-ochre{color:var(--gp-ochre)}.full-bleed{max-width:var(--gp-page-width)!important}.align-right{text-align:right}.align-center{text-align:center}.sans{font-family:var(--gp-sans)}.mono{font-family:var(--gp-mono)}.italic{font-style:italic}.muted{color:var(--gp-margin-ink)}.very-muted{color:var(--gp-ghost-ink)}.small{font-size:var(--gp-small)}.micro{font-size:var(--gp-micro)}.cf::after{content:"";display:table;clear:both}.mt-sm{margin-top:var(--gp-space-sm)}.mt-md{margin-top:var(--gp-space-md)}.mt-lg{margin-top:var(--gp-space-lg)}.mt-xl{margin-top:var(--gp-space-xl)}.mb-sm{margin-bottom:var(--gp-space-sm)}.mb-md{margin-bottom:var(--gp-space-md)}.mb-lg{margin-bottom:var(--gp-space-lg)}.mb-xl{margin-bottom:var(--gp-space-xl)}.seq-1{color:var(--gp-seq-1)}.seq-2{color:var(--gp-seq-2)}.seq-3{color:var(--gp-seq-3)}.seq-4{color:var(--gp-seq-4)}.seq-5{color:var(--gp-seq-5)}}@media (max-width:960px){article{padding-top:var(--gp-space-lg);padding-bottom:var(--gp-space-lg)}label.sidenote-toggle:not(.sidenote-number){display:inline;cursor:pointer;color:var(--gp-red);font-size:.85em}.marginnote,.sidenote{display:none;float:none;position:static;margin:var(--gp-space-sm) 0;width:100%;background:var(--gp-code-bg);padding:var(--gp-space-sm) var(--gp-space-md);border-left:2px solid var(--gp-light-rule);font-size:var(--gp-small);color:var(--gp-margin-ink)}.sidenote-toggle:checked+.marginnote,.sidenote-toggle:checked+.sidenote{display:block}figure.figure-margin{float:none;margin-right:0;width:100%}figure:not(.figure-margin):not(.figure-full):not(.evidence__image) figcaption{float:none;margin-right:0;width:100%;margin-top:var(--gp-space-xs)}figure.figure-full,figure.figure-full figcaption{max-width:100%;float:none;width:100%}.compare-wrap,.evidence,.figure-compare{grid-template-columns:1fr}.evidence__caption{grid-column:1}.brief-header{grid-template-columns:1fr}.brief-header__stat{text-align:left;min-width:0}.gp-map,.gp-map-frame{min-height:24rem}.gp-map-panel{width:min(18rem,calc(100% - 2rem))}.gp-map-meta{grid-template-columns:repeat(3,minmax(0,1fr))}.small-multiples-3,.small-multiples-4{grid-template-columns:repeat(2,1fr)}.small-multiples-6{grid-template-columns:repeat(3,1fr)}.running-header{flex-direction:column}.bar-chart li,.dot-chart li,.dumbbell li{grid-template-columns:100px 1fr auto}.strip-plot li{grid-template-columns:100px 1fr}.sp-axis-labels{margin-left:calc(100px + var(--gp-space-sm))}.bullet-graph{grid-template-columns:100px 1fr auto}.bg-axis{margin-left:calc(100px + var(--gp-space-sm))}}@media (max-width:560px){article{padding-top:var(--gp-space-md);padding-bottom:var(--gp-space-md)}.stat-grid{grid-template-columns:repeat(2,1fr)}.metric-strip{grid-template-columns:repeat(2,minmax(0,1fr))}.activity-timeline__lane{grid-template-columns:70px 1fr}.activity-timeline__value{grid-column:2}.gp-map,.gp-map-frame{min-height:21rem}.gp-map-panel{left:var(--gp-space-sm);right:var(--gp-space-sm);top:var(--gp-space-sm);width:auto;padding:.7rem .75rem}.gp-map-meta{grid-template-columns:1fr;gap:.45rem}.bar-chart li,.dot-chart li,.dumbbell li{grid-template-columns:70px 1fr auto}.strip-plot li{grid-template-columns:70px 1fr}.sp-axis-labels{margin-left:calc(70px + var(--gp-space-sm))}.bullet-graph{grid-template-columns:70px 1fr auto}.bg-axis{margin-left:calc(70px + var(--gp-space-sm))}.small-multiples-3,.small-multiples-4,.small-multiples-6{grid-template-columns:repeat(2,1fr)}}@media print{:root{--gp-font-size:11pt;--gp-text-width:120mm;--gp-margin-width:50mm;--gp-gutter:10mm;--gp-outer-margin:0mm}html{color-scheme:light}body{background:#fff;color:#000}article{max-width:none;padding:0}a{text-decoration:none;color:#000}.marginnote,.sidenote{display:block!important;float:right;position:static;margin-right:calc(-1 * (var(--gp-margin-width) + var(--gp-gutter)));width:var(--gp-margin-width);font-size:8pt;background:0 0;border:none;padding:0}input.sidenote-toggle,label.sidenote-toggle:not(.sidenote-number){display:none}figure,table{break-inside:avoid}h1,h2,h3{break-after:avoid}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@andrewxhill/graphics-press-css",
3
- "version": "4.2.1",
3
+ "version": "4.3.0",
4
4
  "description": "A typographic and data-visualization CSS library derived from the books of Edward Tufte, the cartographic color principles of Eduard Imhof, and the typographic standards of Robert Bringhurst.",
5
5
  "keywords": [
6
6
  "css",