You have two resources: a font (`filmstintin-talking.ttf`) and a rendering specification (`tintin-spec.md`). They may be provided as Observable FileAttachments (with `.href` / `.text()` methods) or as plain URLs. Do NOT read or display the full spec file.

**Step 0** — If you have plain URLs rather than FileAttachments, run these two cells first to construct the required objects. If you already have native FileAttachments named `filmstintinTalkingTtf` and `tintinSpecMd`, skip this step.

Cell A — fetch the font and create an object with a `.href` property:

```
const filmstintinTalkingTtf = await fetch("URL_TO_FONT", {proxy: true})
  .then(r => r.arrayBuffer())
  .then(buf => ({ href: URL.createObjectURL(new Blob([buf], {type: "font/ttf"})) }));
```

Cell B — fetch the spec and wrap it so `.text()` works without a network call inside the bootstrap:

```
const tintinSpecMd = await fetch("URL_TO_SPEC", {proxy: true})
  .then(r => r.text())
  .then(t => ({ text: () => Promise.resolve(t) }));
```

**Step 1** — Run this bootstrap cell exactly as written (do not modify its body):

```
const _T = await (async () => {
  const src = [...(await tintinSpecMd.text()).matchAll(/```js\n([\s\S]*?)```/g)]
    .reduce((a, b) => a[1].length > b[1].length ? a : b)[1]
  const lib = new Function("filmstintinTalkingTtf", "d3", src + ";" +
    `return{${src.match(/^(?:function|const|let)\s+([A-Za-z_$]\w*)/gm)
      .map(m => m.split(/\s+/)[1]).join(",")}}`)
    (filmstintinTalkingTtf, d3)
  await lib.tintinFontReady
  return lib
})()
```

**Step 2** — Run this cell to display the specification (one cell, do not modify):

```
(await tintinSpecMd.text()).split('\n## Code')[0]
```

**Step 3** — Read the displayed specification line by line. It is mandatory — every rule is load-bearing, every token value is exact. Treat it as a contract, not a suggestion.

All library exports are on `_T` — use `_T.TINTIN`, `_T.tintinBar(...)`, `_T.tintinLayout(...)`, etc. Observable cells can only declare one `const` per cell — never destructure `_T` into separate names.

**Step 4** — Don't show any kind of summary of the file, just a one-line confirmation when you're ready to draw something.