/* Gravity page: the figures and interactive diagrams that teach the paper's argument.
   Fits science.css and palette.css. In the figures each colour has one meaning:
   ink for the lattice and its exact objects, cyan (#009fe3) for the light cone of the interval.
   Line style repeats every distinction, so nothing depends on colour alone. */

.science-page .gp-panel { margin: 2.2rem 0 2.4rem; border: 1px solid var(--rpi-line); background: #fff; }
.gp-panel-head {
  display: flex; flex-wrap: wrap; justify-content: space-between; gap: .3rem 1rem;
  padding: .85rem 1.25rem; border-bottom: 1px solid var(--rpi-line);
  font: 500 .7rem/1.6 var(--rpi-mono); letter-spacing: .06em; text-transform: uppercase; color: var(--rpi-ink);
}
.gp-panel-head > span:last-child { color: var(--rpi-muted); }
.gp-math { text-transform: none; letter-spacing: 0; }
.gp-panel-body {
  display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: 1.6rem 2.2rem;
  padding: 1.4rem 1.25rem 1.5rem; align-items: start;
}
.science-page .gp-panel figcaption { margin: 0; max-width: none; padding: 1rem 1.25rem 1.15rem; border-top: 1px solid var(--rpi-line); }
.science-page .gp-panel figcaption p { margin: 0 0 .55rem; font-size: inherit; line-height: inherit; }
.science-page .gp-panel figcaption p:last-child { margin-bottom: 0; }

/* Figures */
.gp-cell-body { grid-template-columns: minmax(0, 390fr) minmax(0, 220fr) minmax(0, 430fr); grid-template-areas: "cell simplex side"; }
.gp-fig-cell { grid-area: cell; }
.gp-fig-simplex { grid-area: simplex; }
.gp-cell-body .gp-side { grid-area: side; }
.gp-fig { margin: 0; min-width: 0; }
.science-page .gp-fig-title {
  margin: 0 0 .6rem; font: 500 .68rem/1.5 var(--rpi-mono); letter-spacing: .05em; text-transform: uppercase; color: var(--rpi-muted);
}
.gp-svg { display: block; width: 100%; height: auto; overflow: visible; }
.gp-svg text { font: 500 13px var(--rpi-mono); fill: var(--rpi-ink); }

.gp-cell .gp-axis text { font-size: 11px; fill: var(--rpi-muted); }
.gp-cell .gp-postings line { stroke: #c4d4cc; stroke-width: 1.2; }
.gp-cell .gp-postings line.is-on { stroke: var(--rpi-ink); stroke-width: 3.2; }
.gp-time-edge line, .gp-e4 line { stroke: var(--rpi-ink); stroke-width: 5; }
.gp-time-edge line.gp-gap, .gp-e4 line.gp-gap { stroke: #fff; stroke-width: 2; }
.gp-node rect { fill: #fff; }
.gp-node text { text-anchor: middle; fill: #6d7d78; }
.gp-node.is-on rect { stroke: var(--rpi-ink); stroke-width: 1.4; }
.gp-node.is-on text { fill: var(--rpi-ink); }
.gp-node.is-last rect { fill: var(--rpi-ink); }
.gp-node.is-last text { fill: #fff; }

.gp-simplex .gp-e1 { stroke: var(--rpi-ink); stroke-width: 3.2; }
.gp-simplex .gp-e2, .gp-key-e2 { stroke: var(--rpi-ink); stroke-width: 1.7; stroke-dasharray: 7 5; }
.gp-simplex .gp-e3, .gp-key-e3 { stroke: var(--rpi-ink); stroke-width: 2; stroke-dasharray: .1 5; stroke-linecap: round; }
.gp-simplex .is-off { visibility: hidden; }
.gp-vertex circle { fill: var(--rpi-ink); }
.gp-vertex.is-empty circle { fill: #fff; stroke: #8a9a95; stroke-width: 1.2; stroke-dasharray: 2 2; }
.gp-vertex.is-empty text { fill: #8a9a95; }

/* Line-style key */
.science-page .gp-key { list-style: none; margin: 1.1rem 0 0; padding: 0; display: grid; gap: .45rem; font-size: .86rem; line-height: 1.45; }
.gp-key li { display: grid; grid-template-columns: 2.6rem minmax(0, 1fr); gap: .7rem; align-items: center; }
.gp-key svg { display: block; width: 2.6rem; height: 12px; overflow: visible; }
.gp-key-e1 { stroke: var(--rpi-ink); stroke-width: 3.2; }
.gp-key-cone { stroke: #009fe3; stroke-width: 2.6; }
.gp-key-reach { stroke: #8a9a95; stroke-width: 1.2; stroke-dasharray: 4 4; }

/* Controls and readouts */
.gp-controls[hidden], .gp-js-only[hidden] { display: none; }
.science-page .gp-panel .gp-small-label {
  display: block; margin: 0 0 .5rem; font: 500 .68rem/1.6 var(--rpi-mono); letter-spacing: .06em;
  text-transform: uppercase; color: var(--rpi-muted);
}
.gp-buttons { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: .45rem; margin-bottom: .55rem; }
.gp-panel button {
  min-height: 44px; padding: .5rem .55rem; border: 1px solid #8fa39d; border-radius: 0; background: #fff;
  color: var(--rpi-ink); font: 500 .86rem/1.3 var(--rpi-mono); cursor: pointer;
}
.gp-panel button:hover:not(:disabled) { background: var(--rpi-ice); border-color: var(--rpi-ink); }
.gp-panel button:disabled { color: #a3afab; border-color: #d6dfdb; cursor: default; }
.gp-panel button.gp-text-button { font-family: var(--rpi-sans); font-size: .84rem; padding-inline: .9rem; }
.gp-readout { border-top: 1px solid var(--rpi-line); margin-top: 1.1rem; padding-top: 1rem; }
.science-page .gp-readout p { font-size: .9rem; line-height: 1.6; margin: 0 0 .75rem; }
.science-page .gp-readout p.gp-value { font: 500 1rem/1.5 var(--rpi-mono); color: var(--rpi-ink); margin-bottom: .45rem; overflow-wrap: anywhere; }

.gp-range-label { display: flex; justify-content: space-between; align-items: baseline; gap: 1rem; font-weight: 600; font-size: .92rem; margin: 0 0 .2rem; }
.gp-range-label output { font: 500 1.05rem var(--rpi-mono); }
.gp-range { display: block; width: 100%; min-height: 36px; margin: 0; accent-color: var(--rpi-link); cursor: pointer; }
.gp-range-ends { display: flex; justify-content: space-between; margin-top: .6rem; font: .7rem/1.4 var(--rpi-mono); color: var(--rpi-muted); }
.gp-range-row { display: flex; align-items: center; gap: .8rem; margin-top: .6rem; }

.gp-metrics { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .8rem; margin: 1.1rem 0 0; }
.gp-metrics div { border-top: 1px solid var(--rpi-line); padding-top: .55rem; min-width: 0; }
.gp-metrics dt { font: 500 .7rem/1.45 var(--rpi-mono); color: var(--rpi-muted); }
.gp-metrics dd { margin: .25rem 0 0; font: 500 1.35rem/1.2 var(--rpi-sans); letter-spacing: -.02em; font-variant-numeric: tabular-nums; color: var(--rpi-ink); }
.science-page .gp-status { margin: 1rem 0 0; padding: .75rem .9rem; border-left: 3px solid var(--rpi-ink); background: #f4f8f6; font-size: .9rem; line-height: 1.6; }

.gp-table { width: 100%; border-collapse: collapse; margin-top: 1.1rem; font-size: .86rem; }
.gp-table caption { text-align: left; margin-bottom: .45rem; font: 500 .68rem/1.6 var(--rpi-mono); letter-spacing: .06em; text-transform: uppercase; color: var(--rpi-muted); }
.gp-table th { text-align: left; font: 500 .7rem/1.4 var(--rpi-mono); color: var(--rpi-muted); border-bottom: 1px solid var(--rpi-line); padding: .35rem .4rem .35rem 0; vertical-align: bottom; }
.gp-table td { padding: .45rem .4rem .45rem 0; border-bottom: 1px solid #e2eae6; vertical-align: top; }
.gp-table .gp-num { font-family: var(--rpi-mono); text-align: right; white-space: nowrap; padding-right: .9rem; }

/* The kappa slice */
.gp-slice-fig { max-width: 30rem; }
.gp-slice .gp-reach { fill: none; stroke: #8a9a95; stroke-width: 1.2; stroke-dasharray: 4 4; }
.gp-slice .gp-order { fill: #eef3f1; stroke: var(--rpi-ink); stroke-width: 1.6; }
.gp-slice .gp-cone { fill: none; stroke: #009fe3; stroke-width: 2.6; }
.gp-slice .gp-rest, .gp-slice .gp-mid { fill: var(--rpi-ink); }
.gp-slice .gp-post circle { fill: var(--rpi-ink); stroke: #fff; stroke-width: 2; }
.gp-slice .gp-post.is-out circle { fill: #fff; stroke: var(--rpi-ink); stroke-width: 2.2; }
.gp-slice .gp-unreach { fill: #fff; stroke: var(--rpi-ink); stroke-width: 1.8; }
.gp-slice .gp-lab { font-size: 12.5px; fill: var(--rpi-muted); }
.gp-slice .gp-lab-strong { fill: var(--rpi-ink); }

.science-page .gp-check { font-size: .87rem; line-height: 1.7; color: var(--rpi-muted); max-width: 48rem; }

@media (prefers-reduced-motion: no-preference) {
  .gp-slice .gp-cone { transition: r .12s ease-out; }
}
@media (max-width: 900px) {
  .gp-panel-body { grid-template-columns: minmax(0, 1fr); }
  .gp-cell-body { grid-template-columns: minmax(0, 390fr) minmax(0, 220fr); grid-template-areas: "cell simplex" "side side"; }
  .gp-slice-fig { margin-inline: auto; }
}
@media (max-width: 600px) {
  .gp-panel-head, .gp-panel-body, .science-page .gp-panel figcaption { padding-inline: 1rem; }
  .gp-cell-body { grid-template-columns: minmax(0, 1fr); grid-template-areas: "cell" "side" "simplex"; }
  .gp-fig-simplex .gp-simplex { max-width: 14rem; }
  .gp-cell text { font-size: 14px; }
  .gp-cell .gp-axis text { font-size: 13px; }
  .gp-metrics dd { font-size: 1.15rem; }
}
@media print {
  .gp-controls { display: none !important; }
  .science-page .gp-panel { break-inside: avoid; }
}
.gp-section :is(sub, sup) { line-height: 0; }

/* Charts (dispersion): solid hairline grid, 2px series, text in text colours.
   Series: plus = ink, cross = magenta (#e6007e); the light cone = cyan, as everywhere on the page. */
.gp-charts { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
.gp-charts .gp-key-row, .gp-charts .gp-wave-controls { grid-column: 1 / -1; }
.gp-chart .gp-grid line { stroke: #e3eae7; stroke-width: 1; }
.gp-chart .gp-baseline { stroke: #9fb0aa; stroke-width: 1; }
.gp-chart .gp-axis text { font-size: 11.5px; fill: var(--rpi-muted); }
.gp-chart .gp-axis .gp-axis-title { font-size: 11.5px; fill: var(--rpi-ink); }
.gp-chart polyline, .gp-chart .gp-cone-line { fill: none; stroke-linejoin: round; stroke-linecap: round; }
.gp-chart .gp-cone-line, .gp-key-cone { stroke: #009fe3; stroke-width: 2; }
.gp-chart .gp-series-plus, .gp-key-plus { stroke: var(--rpi-ink); stroke-width: 2.2; }
.gp-chart .gp-series-cross, .gp-key-crossmode { stroke: #e6007e; stroke-width: 2.2; }
.gp-chart .gp-lead-plus, .gp-chart .gp-lead-cross, .gp-key-lead { stroke: #6d7d78; stroke-width: 1.4; stroke-dasharray: .1 4; stroke-linecap: round; }
.gp-chart .gp-pt-plus, .gp-chart .gp-hp { fill: var(--rpi-ink); stroke: #fff; stroke-width: 2; }
.gp-chart .gp-pt-cross, .gp-chart .gp-hx { fill: #e6007e; stroke: #fff; stroke-width: 2; }
.gp-chart .gp-dl { font: 500 11.5px var(--rpi-sans); fill: var(--rpi-ink); paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linejoin: round; }
.gp-chart .gp-dl-soft { fill: var(--rpi-muted); }
.gp-chart .gp-cross-hair line { stroke: var(--rpi-muted); stroke-width: 1; }
.gp-chart .gp-cross-hair[hidden] { display: none; }
.gp-chart .gp-hit { fill: transparent; cursor: crosshair; }
.gp-chart .gp-dl-short { display: none; }
.science-page .gp-key-row { display: flex; flex-wrap: wrap; gap: .4rem 1.4rem; margin: 0; }
.gp-key-row li { display: flex; gap: .55rem; align-items: center; }
.gp-metrics-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.science-page .gp-table-view { margin-top: .8rem; }
.science-page .gp-table-view summary { cursor: pointer; font-weight: 500; color: var(--rpi-ink); }
.science-page .gp-table-view .gp-table { max-width: 34rem; display: block; overflow-x: auto; }
.science-page .gp-table-view .gp-check { margin: .7rem 0 0; }
@media (max-width: 900px) {
  .gp-charts { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 600px) {
  .gp-metrics-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .gp-chart .gp-axis text, .gp-chart .gp-axis .gp-axis-title, .gp-chart .gp-dl { font-size: 17px; }
  .gp-chart .gp-dl-long { display: none; }
  .gp-chart .gp-dl-short { display: inline; }
}

/* The doublers: zone slice, corners, the mode in position space */
.gp-zone-body { grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); }
.gp-zone-side { display: grid; gap: 1.2rem; }
.gp-zone .gp-grid line { stroke: #e3eae7; stroke-width: 1; }
.gp-zone .gp-frame { fill: none; stroke: #b9c7c2; stroke-width: 1; }
.gp-zone .gp-wedge-g, .gp-key-wedge { fill: #009fe3; fill-opacity: .12; stroke: none; }
.gp-zone .gp-wedge-d { fill: #182623; fill-opacity: .09; stroke: none; }
.gp-zone .gp-lead { stroke: #6d7d78; stroke-width: 1.4; stroke-dasharray: .1 4; stroke-linecap: round; }
.gp-zone polyline { fill: none; stroke-linejoin: round; stroke-linecap: round; }
.gp-zone .gp-zero-g, .gp-key-zero-g { stroke: #009fe3; stroke-width: 2.2; }
.gp-zone .gp-zero-d, .gp-key-zero-d { stroke: var(--rpi-ink); stroke-width: 2.2; }
.gp-zone .gp-time-g, .gp-zone .gp-time-d { stroke: var(--rpi-ink); stroke-width: 1.6; }
.gp-zone .gp-arrowhead { fill: var(--rpi-ink); }
.gp-zone .gp-pt, .gp-mode .gp-pt { fill: var(--rpi-ink); stroke: #fff; stroke-width: 2; }
.gp-zone .gp-axis text { font-size: 11.5px; fill: var(--rpi-muted); }
.gp-zone .gp-axis .gp-axis-title { fill: var(--rpi-ink); }
.gp-zone .gp-dl, .gp-mode .gp-dl { font: 500 12px var(--rpi-sans); fill: var(--rpi-ink); paint-order: stroke; stroke: #fff; stroke-width: 3px; stroke-linejoin: round; }
.gp-mode .gp-dl-soft { fill: var(--rpi-muted); font-size: 11px; }
.gp-corners .gp-corner rect { fill: #fff; }
.gp-corners .gp-corner text { text-anchor: middle; fill: #8a9a95; font-size: 12px; }
.gp-corners .gp-corner .gp-ker { font: 500 11px var(--rpi-sans); }
.gp-corners .gp-corner.is-origin rect, .gp-corners .gp-corner.is-axis rect { stroke: var(--rpi-ink); stroke-width: 1.4; }
.gp-corners .gp-corner.is-origin text, .gp-corners .gp-corner.is-axis text { fill: var(--rpi-ink); }
.gp-corners .gp-corner.is-axis rect { fill: var(--rpi-ink); }
.gp-corners .gp-corner.is-axis text:not(.gp-ker) { fill: #fff; }
.gp-corners .gp-corner .gp-ker { font-weight: 600; }
.gp-mode .gp-cube { stroke: #c4d4cc; stroke-width: 1; }
.gp-mode .gp-mode-edge { stroke: var(--rpi-ink); stroke-linecap: round; }
.gp-mode .gp-mode-1 { stroke-width: 1.5; }
.gp-mode .gp-mode-2 { stroke-width: 3; }
.gp-mode .gp-mode-3 { stroke-width: 6; }
.science-page .gp-fig-note { font-size: .84rem; line-height: 1.6; color: var(--rpi-muted); margin: .5rem 0 0; }
@media (max-width: 900px) {
  .gp-zone-body { grid-template-columns: minmax(0, 1fr); }
  .gp-zone-side { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
}
@media (max-width: 600px) {
  .gp-zone-side { grid-template-columns: minmax(0, 1fr); }
  .gp-zone .gp-axis text, .gp-zone .gp-dl { font-size: 15px; }
}
.gp-mode-body { grid-template-columns: minmax(0, 380fr) minmax(0, 270fr); align-items: center; }
.gp-fig-mode .gp-mode { max-width: 18rem; margin-inline: auto; }
.science-page .gp-facts { margin: 1.2rem 0 0; display: grid; gap: .7rem; }
.gp-facts div { border-top: 1px solid var(--rpi-line); padding-top: .55rem; }
.gp-facts dt { font: 500 .7rem/1.45 var(--rpi-mono); color: var(--rpi-muted); }
.gp-facts dd { margin: .2rem 0 0; font-size: .88rem; line-height: 1.5; color: var(--rpi-ink); }
@media (max-width: 900px) { .gp-mode-body { grid-template-columns: minmax(0, 1fr); } }
.gp-mode-body .gp-corners { max-width: 25rem; }
.gp-mode .gp-mode-end { fill: var(--rpi-ink); }
.gp-mode .gp-dl { font-size: 13px; }
.gp-zone .gp-dl { font-size: 11px; }
.gp-zone .gp-axis text, .gp-zone .gp-axis .gp-axis-title { font: 500 10.5px var(--rpi-mono); }
@media (max-width: 600px) {
  .gp-zone .gp-axis text, .gp-zone .gp-axis .gp-axis-title { font-size: 15px; }
  .gp-zone .gp-dl { font-size: 17px; }
  .gp-mode .gp-dl { font-size: 15px; }
  .gp-corners .gp-corner text { font-size: 14px; }
}

/* Published checking programs, listed beside the figures they feed */
.science-page .gp-software { margin-top: 1rem; border-top: 1px solid var(--rpi-line); padding-top: .8rem; }
.science-page .gp-software ul { list-style: none; margin: 0; padding: 0; display: grid; gap: .7rem; }
.gp-software li { display: grid; grid-template-columns: minmax(0, auto) minmax(0, 1fr); gap: .1rem .8rem; align-items: baseline; }
.science-page .gp-software a { font: 500 .86rem var(--rpi-mono); }
.gp-soft-meta { font-size: .78rem; color: var(--rpi-muted); }
.gp-soft-what { grid-column: 1 / -1; font-size: .86rem; color: var(--rpi-muted); }
.science-page .gp-sha { grid-column: 1 / -1; font: .7rem/1.5 var(--rpi-mono); color: var(--rpi-muted); overflow-wrap: anywhere; word-break: break-all; }

/* The ordered limit, written out with what happens at each step */
.science-page .gp-limits { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.3fr); gap: 0 .2rem; max-width: 48rem; margin: 1.6rem 0 1.8rem; }
.gp-limit { border-top: 3px solid var(--rpi-ink); padding-top: .8rem; }
.gp-limit-inner { border-top-color: #8fa39d; }
.gp-limit-op { display: block; font: 500 clamp(1.5rem, 3vw, 2.1rem)/1.2 var(--rpi-sans); letter-spacing: -.02em; color: var(--rpi-ink); margin-bottom: .55rem; white-space: nowrap; }
.gp-limit-op sub { font-size: .5em; }
.science-page .gp-limit p { font-size: .9rem; line-height: 1.6; margin: 0; padding-right: 1rem; }
.science-page .gp-display { font-size: 1.02rem; line-height: 1.9; overflow-x: auto; padding: .4rem 0 .4rem 1rem; border-left: 3px solid var(--rpi-line); }
.gp-chart .gp-area { fill: var(--rpi-ink); fill-opacity: .08; stroke: none; }
.gp-chart .gp-cut { stroke: var(--rpi-muted); stroke-width: 1; stroke-dasharray: 4 3; }
.gp-metrics-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.gp-log-body .gp-metrics { grid-column: 1 / -1; margin-top: 0; }
@media (max-width: 600px) {
  .science-page .gp-limits { grid-template-columns: minmax(0, 1fr); gap: 1rem; }
  .gp-metrics-3 { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
}

/* Route through the 'How the result works' sections */
.science-page .gp-route { display: flex; flex-wrap: wrap; gap: .5rem 1.6rem; align-items: baseline; padding: 1.1rem 0; border-bottom: 1px solid var(--rpi-line); }
.gp-route-label { font: 500 .7rem/1.6 var(--rpi-mono); letter-spacing: .06em; text-transform: uppercase; color: var(--rpi-muted); }
.science-page .gp-route a { font: 500 .8rem/1.6 var(--rpi-mono); text-decoration: none; }
.science-page .gp-route a:hover { text-decoration: underline; }
.gp-section { scroll-margin-top: 1rem; }

/* Status map of the eight requirements. Colour carries status only: green #0b7a3e met or proved, red #c8401f open or failed;
   every chip also says it in words. Qualifiers (what a result rests on) are outlined, not coloured. */
.gp-ledger { max-width: 64rem; margin-top: 1.6rem; }
.science-page .gp-ledger-banner { font-size: .92rem; line-height: 1.6; padding: .8rem 0; margin: 0; border-top: 3px solid var(--rpi-ink); border-bottom: 1px solid var(--rpi-line); }
.gp-ledger-banner .gp-chip { margin-right: .5rem; }
.science-page .gp-ledger-list { list-style: none; margin: 0; padding: 0; }
.gp-ledger-row { display: grid; grid-template-columns: 2rem minmax(0, 11rem) minmax(0, 15rem) minmax(0, 1fr); gap: .3rem 1.2rem; padding: .95rem 0; border-bottom: 1px solid var(--rpi-line); align-items: start; }
.gp-ledger-n { font: 500 .8rem/1.9 var(--rpi-mono); color: var(--rpi-muted); }
.gp-ledger-name strong { display: block; font-weight: 600; font-size: .98rem; line-height: 1.4; color: var(--rpi-ink); }
.gp-ledger-where { display: block; font: .72rem/1.6 var(--rpi-mono); color: var(--rpi-muted); margin-top: .15rem; }
.gp-ledger-status { display: flex; flex-wrap: wrap; gap: .35rem; align-content: flex-start; }
.science-page .gp-ledger-text { margin: 0; font-size: .9rem; line-height: 1.6; }
.gp-chip { display: inline-block; padding: .18rem .5rem; font: 500 .72rem/1.35 var(--rpi-mono); letter-spacing: .01em; border: 1px solid transparent; }
.gp-chip-met, .gp-chip-thm { background: #0b7a3e; color: #fff; }
.gp-chip-open, .gp-chip-not { background: #c8401f; color: #fff; }
.gp-chip-ident { background: #fff; color: var(--rpi-ink); border-color: var(--rpi-ink); }
.gp-qual { display: inline-block; padding: .14rem .45rem; font: .72rem/1.35 var(--rpi-mono); color: var(--rpi-ink); border: 1px solid #8fa39d; background: #fff; }
.science-page .gp-ledger-key { display: flex; flex-wrap: wrap; gap: .6rem 1.6rem; margin: .9rem 0 0; font-size: .82rem; color: var(--rpi-muted); }
.gp-ledger-key > span { display: inline-flex; gap: .35rem; align-items: center; }
@media (max-width: 900px) {
  .gp-ledger-row { grid-template-columns: 2rem minmax(0, 1fr); }
  .gp-ledger-status, .gp-ledger-text { grid-column: 2; }
}
.science-page .gp-open-list { max-width: 64rem; margin-top: 1.4rem; border-top: 3px solid var(--rpi-ink); }
.gp-open-row { grid-template-columns: 2rem minmax(0, 15rem) minmax(0, 1fr); }
@media (max-width: 900px) { .gp-open-row { grid-template-columns: 2rem minmax(0, 1fr); } .gp-open-row .gp-ledger-text { grid-column: 2; } }

/* Newton: the static response along three static directions. Ink for all three, told apart by line style and direct labels;
   the Newton value 1 is a grey reference line; resonances are hairline dotted verticals. */
.gp-newton-body { grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); }
.gp-chart .gp-dir { fill: none; stroke: var(--rpi-ink); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }
.gp-chart .gp-dir-b { stroke-dasharray: 9 5; }
.gp-chart .gp-dir-c { stroke-dasharray: 12 4 2 4; stroke-linecap: butt; }
.gp-chart .gp-pole { stroke: #8a9a95; stroke-width: 1; stroke-dasharray: 2 3; }
.gp-chart .gp-newton-line { stroke: #8a9a95; stroke-width: 1.5; }
@media (max-width: 900px) { .gp-newton-body { grid-template-columns: minmax(0, 1fr); } }
.gp-key .gp-key-dir { fill: none; stroke: var(--rpi-ink); stroke-width: 2; }
.gp-key .gp-key-dir.gp-dir-b { stroke-dasharray: 9 5; }
.gp-key .gp-key-dir.gp-dir-c { stroke-dasharray: 12 4 2 4; }
.gp-nowrap { white-space: nowrap; }
.science-page .gp-matrix-view { max-width: 43rem; margin: 0 0 1.2rem; }
.gp-matrix { width: auto; font-size: .8rem; }
.gp-matrix th, .gp-matrix td { padding: .3rem .45rem; text-align: right; }
.gp-matrix thead th, .gp-matrix tbody th { font: 500 .7rem var(--rpi-mono); color: var(--rpi-muted); }
.gp-matrix td.gp-num { font-family: var(--rpi-mono); padding-right: .45rem; }
.science-page .gp-matrix-view .gp-table { overflow-x: auto; display: block; max-width: 100%; }

/* Running a listed program in the browser */
.gp-software .gp-run { grid-column: 1 / -1; margin-top: .35rem; }
.gp-software .gp-run[hidden], .gp-software .gp-run-out[hidden] { display: none; }
.science-page .gp-run-out { margin: .55rem 0 0; padding: .7rem .8rem; max-height: 22rem; overflow: auto; background: #f4f8f6; border-left: 3px solid var(--rpi-ink);
  font: .74rem/1.55 var(--rpi-mono); color: var(--rpi-ink); white-space: pre-wrap; overflow-wrap: anywhere; }
/* gp:twomasses */
/* Two masses at one loop: Table 3 as a running sum. This paper's values are solid ink bars, BDH's are hollow bars, so the two
   calculations differ by fill, not colour; every value is also printed in the table columns. Diagram glyphs are illustrations. */
.gp-wf-body { padding: 1.2rem 1.25rem 1.3rem; }
.science-page .gp-wf-key { margin: 0 0 .9rem; font-size: .86rem; }
.gp-wf-key svg { display: block; width: 30px; height: 12px; overflow: visible; }
.gp-wf { border-top: 1px solid var(--rpi-line); }
.gp-wf-row { display: grid; grid-template-columns: minmax(0, 22rem) minmax(0, 1fr) 5.4rem 5.4rem; grid-template-areas: "label track ours bdh";
  column-gap: 1rem; align-items: center; border-bottom: 1px solid #e2eae6; }
.gp-wf-label { grid-area: label; display: flex; align-items: center; gap: .7rem; min-height: 44px; font-size: .9rem; line-height: 1.35; color: var(--rpi-ink); }
.gp-wf-glyphs { display: flex; gap: .3rem; flex: none; width: 8.4rem; }
.gp-fd { display: block; width: 4.1rem; height: auto; }
.gp-fd-m { fill: none; stroke: var(--rpi-ink); stroke-width: 1.6; }
.gp-fd-g { fill: none; stroke: var(--rpi-ink); stroke-width: 1.3; stroke-linejoin: round; }
.gp-wf-track { grid-area: track; min-width: 0; }
.gp-wf-track svg { display: block; width: 100%; height: 44px; }
.gp-wf-ours { fill: var(--rpi-ink); }
.gp-wf-bdh { fill: #fff; stroke: var(--rpi-ink); stroke-width: 1.3; vector-effect: non-scaling-stroke; }
.gp-wf-zero { stroke: var(--rpi-ink); stroke-width: 1; vector-effect: non-scaling-stroke; }
.gp-wf-grid { stroke: #e3eae7; stroke-width: 1; vector-effect: non-scaling-stroke; }
.gp-wf-link { stroke: #8a9a95; stroke-width: 1; vector-effect: non-scaling-stroke; }
.gp-wf-val { grid-area: ours; font: 500 .92rem/1.3 var(--rpi-mono); text-align: right; font-variant-numeric: tabular-nums; color: var(--rpi-ink); white-space: nowrap; }
.gp-wf-val.gp-wf-ref { grid-area: bdh; }
.gp-wf-head { border-bottom-color: var(--rpi-line); }
.gp-wf-head .gp-wf-label, .gp-wf-head .gp-wf-val { min-height: 0; padding: .45rem 0; font: 500 .7rem/1.4 var(--rpi-mono); color: var(--rpi-muted); }
.gp-wf-ticks { position: relative; align-self: stretch; }
.gp-wf-t { position: absolute; bottom: .45rem; transform: translateX(-50%); font: 500 .7rem/1.4 var(--rpi-mono); color: var(--rpi-muted); }
.gp-wf-t-m10 { left: 12.5%; }
.gp-wf-t-0 { left: 43.75%; }
.gp-wf-t-10 { left: 75%; }
.gp-wf-total { border-top: 3px solid var(--rpi-ink); border-bottom: 0; }
.gp-wf-total .gp-wf-label, .gp-wf-total .gp-wf-val { font-weight: 600; }
.gp-reading-list { max-width: 64rem; margin-top: 1.2rem; border-top: 3px solid var(--rpi-ink); }
.gp-reading-row { grid-template-columns: 2rem minmax(0, 13rem) minmax(0, 6.5rem) minmax(0, 1fr); }
.science-page .gp-units-view { max-width: 48rem; margin: 1.4rem 0 1.6rem; }
.science-page .gp-units-view .science-copy { margin-top: .6rem; }
@media (max-width: 900px) {
  /* Two lines per class: the diagrams and the name, then the bars beside the two values; the bars keep one scale. */
  .gp-wf-row { grid-template-columns: minmax(0, 1fr) 4.6rem 4.6rem; grid-template-areas: "label label label" "track ours bdh"; column-gap: .7rem; }
  .gp-wf-label { padding-top: .45rem; }
  .gp-wf-head .gp-wf-label { padding-bottom: 0; }
  .gp-wf-head .gp-wf-ticks { min-height: 1.6rem; }
  .gp-wf-link { display: none; }
  .gp-reading-row { grid-template-columns: 2rem minmax(0, 1fr); }
}
@media (max-width: 600px) {
  .gp-wf-body { padding-inline: 1rem; }
  .gp-wf-row { grid-template-columns: minmax(0, 1fr) 3.9rem 3.9rem; column-gap: .5rem; }
  .gp-wf-glyphs { width: 6.2rem; gap: .2rem; }
  .gp-fd { width: 3rem; }
  .gp-wf-label { font-size: .88rem; gap: .5rem; }
  .gp-wf-val { font-size: .84rem; }
}
/* /gp:twomasses */
/* gp:classical */
/* The classical limit: F1 along an axis line (ink) and a null line (cyan, the colour of the light cone on this page), with direct
   labels; the dots are the waves of the chosen torus. An open dot on the baseline marks a wave where F1 = 0. */
.gp-f1-axis { fill: none; stroke: var(--rpi-ink); stroke-width: 2.2; }
.gp-f1-null { fill: none; stroke: #009fe3; stroke-width: 2.2; }
.gp-chart .gp-f1-zero { stroke: #009fe3; stroke-width: 1.6; }
.gp-tw-axis { fill: var(--rpi-ink); stroke: #fff; stroke-width: 1.5; }
.gp-tw-null { fill: #009fe3; stroke: #fff; stroke-width: 1.5; }
.gp-tw-axis.is-zero { fill: #fff; stroke: var(--rpi-ink); stroke-width: 2.2; }
.gp-f1-body .gp-metrics, .gp-f1-body .gp-status { grid-column: 1 / -1; }
.science-page .gp-f1-body .gp-status { margin: 0; }
/* /gp:classical */
/* gp:backgrounds */
/* Backgrounds on the lattice: ink bars for the change of each class and for the corner shifts; signs are in the numbers. */
.gp-bg-body { grid-template-columns: minmax(0, 1fr) minmax(0, 1.15fr); }
.gp-bg-table { width: 100%; border-collapse: collapse; }
.gp-bg-table th[scope="row"] { width: 3.4rem; padding: .1rem .6rem .1rem 0; text-align: left; font: 500 .78rem/1.3 var(--rpi-mono); color: var(--rpi-ink); }
.gp-bg-table .gp-bg-group th { padding: .6rem 0 .15rem; text-align: left; font: 500 .66rem/1.5 var(--rpi-mono); letter-spacing: .06em; text-transform: uppercase; color: var(--rpi-muted); }
.gp-bg-table tbody tr:first-child th { padding-top: 0; }
.gp-bg-track { padding: .1rem 0; }
.gp-bg-track svg, .gp-bg-mini svg { display: block; width: 100%; height: 14px; }
.gp-bg-bar, .gp-bg-sbar { fill: var(--rpi-ink); }
.gp-bg-zero { stroke: #8a9a95; stroke-width: 1; vector-effect: non-scaling-stroke; }
.gp-bg-table td.gp-num { width: 3.6rem; padding: .1rem 0 .1rem .6rem; text-align: right; white-space: nowrap; font: 500 .8rem/1.3 var(--rpi-mono); color: var(--rpi-ink); }
.gp-bg-buttons { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .4rem; margin-bottom: 1.1rem; }
.gp-bg-buttons[hidden] { display: none; }
.gp-panel .gp-bg-buttons button { font-family: var(--rpi-sans); font-size: .82rem; text-align: left; line-height: 1.3; }
.gp-panel .gp-bg-buttons button[aria-pressed="true"], .gp-panel .gp-bg-buttons button[aria-pressed="true"]:hover { background: var(--rpi-ink); border-color: var(--rpi-ink); color: #fff; }
.science-page .gp-bg-name { margin: 0 0 .35rem; font-weight: 600; font-size: .98rem; line-height: 1.4; color: var(--rpi-ink); }
.science-page .gp-bg-desc { margin: 0 0 .9rem; font-size: .88rem; line-height: 1.6; }
.gp-bg-matrix { border-collapse: collapse; margin: 0 0 .9rem; font: 500 .8rem/1.3 var(--rpi-mono); color: var(--rpi-ink); }
.gp-bg-matrix caption { caption-side: top; text-align: left; padding-bottom: .3rem; font: 500 .68rem/1.5 var(--rpi-mono); letter-spacing: .05em; text-transform: uppercase; color: var(--rpi-muted); }
.gp-bg-matrix td { min-width: 2.6rem; padding: .18rem .45rem; text-align: right; border: 1px solid #e2eae6; }
.science-page .gp-bg-nostrain { margin: 0 0 .9rem; font-size: .88rem; color: var(--rpi-ink); }
.science-page .gp-bg-facts { margin-top: 0; }
.gp-bg-facts dd.gp-num { font: 500 .95rem var(--rpi-mono); }
.gp-bg-shift-table { margin-top: 1.1rem; }
.gp-bg-shift-table caption { caption-side: top; text-align: left; padding-bottom: .35rem; font: 500 .68rem/1.5 var(--rpi-mono); letter-spacing: .05em; text-transform: uppercase; color: var(--rpi-muted); }
.gp-bg-shift-table td.gp-num { width: 6.2rem; }
.science-page .gp-table-view .gp-bg-all { display: block; overflow-x: auto; max-width: 100%; }
.science-page .gp-bg-all td.gp-num { white-space: normal; text-align: left; }
.science-page .gp-bg-all tbody th { vertical-align: top; }
@media (max-width: 900px) {
  .gp-bg-body { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 600px) {
  .gp-bg-buttons { grid-template-columns: minmax(0, 1fr); }
}
/* /gp:backgrounds */
/* gp:dressed */
/* What a gap would do (Proposition 6.13): thin muted curves under the doubler term, labelled at their right ends. */
.gp-chart .gp-dressed { fill: none; stroke: var(--rpi-muted); stroke-width: 1.3; }
/* What would have to change (Section 6.10): set apart from the ledger of open questions above it. */
.science-page .gp-changes { margin-top: 2rem; }
/* /gp:dressed */
/* gp:pathsum */
/* What the path sum is (Sections 3.1-3.3, 3.6): a definition card, set off by a heavy rule like the ordered-limit blocks. */
.science-page .gp-pathsum { max-width: 48rem; margin: 1.6rem 0 1.8rem; border-top: 3px solid var(--rpi-ink); padding-top: .8rem; }
.science-page .gp-pathsum .gp-small-label { display: block; margin: 0; font: 500 .68rem/1.6 var(--rpi-mono); letter-spacing: .06em;
  text-transform: uppercase; color: var(--rpi-ink); }
.science-page .gp-pathsum-list { margin-top: .7rem; }
@media (min-width: 700px) {
  .gp-pathsum-list div { display: grid; grid-template-columns: 10.5rem minmax(0, 1fr); gap: 1rem; }
  .gp-pathsum-list dd { margin: 0; }
}
/* /gp:pathsum */
