# map-sideb

Side B of the Abbey Road guest map — the **"Getting here"** arrival schematic:
the Elizabeth line spine in from Heathrow, the Jubilee branch up to St John's
Wood, and a data-driven arrival panel.

Pure inline SVG, no tiles, no dependencies.

## Live URL

```
https://assets.gf.cx/map-sideb/map-sideb.js
```

## Use

```html
<div class="sheet sheet-b" id="sheetB"></div>
<script src="https://assets.gf.cx/map-sideb/map-sideb.js" data-cfasync="false"></script>
```

```js
GfcxMapSideB.render(document.getElementById('sheetB'), meta.sideB);
```

The container is expected to be full-bleed; the SVG is `viewBox="0 0 1120 792"`
with `preserveAspectRatio`. Returns `false` and renders nothing when the
dataset carries no `sideB` block — rather than emitting an empty `<svg>`.

Print consumers pass `onReady` to signal a headless capture:

```js
GfcxMapSideB.render(el, meta.sideB, { onReady: () => { window.__mapReady = true; } });
```

## Why it is shared

`maps.gf.cx/abbeyroad/` and `print.gf.cx/map/print.html` both rendered this
schematic from their own copy. The geometry stayed in sync by luck; the
divergence was in print-only concerns, and each file ended up holding something
the other lacked. Extracted 2026-09-23.

## Contract

- Geometry (paths, stations, park ellipses, place-name labels) is ported
  verbatim from the approved `print.gf.cx/_design/map-b.html` mockup, including
  the 2026-09-22 straightening: **Bond Street → Baker Street → St John's Wood →
  Swiss Cottage lie on one exact straight line.** The mockup's original points
  had a real kink (slope 2.0 vs 2.6) that, next to the faded Bakerloo segment,
  read as two diverging lines. Do not "tidy" those coordinates.
- Only the arrival-panel **prose** is data-driven, from `map-meta.json`'s
  `sideB.arrivalSteps` / `sideB.alternatives`.
- The step carrying **"11 Abbey Road" wraps at 40 chars** instead of the tuned
  34, so the address stays contiguous on one line. A print-page assertion
  checks the rendered DOM for that literal string and a wrap would split it.
  This was print-only; it is now unconditional — invisible on web, load-bearing
  in print.
- Building-level only: the exact unit is never rendered (public surface).
