# _dsa-tokens — local design-system-ASK mirror

Local, pinned mirror of design-system-ASK Tier 1 + Tier 2 foundations for the
diagram bundle in this directory. There is **no runtime fetch** from the
design-system-ASK repo and **no Google Fonts CDN dependency** — the diagram
renders entirely from these local files.

**Synced from:** [`apexSolarKiss/design-system-ASK`](https://github.com/apexSolarKiss/design-system-ASK)
**Pinned commit:** `067691a2fb6ca979cb6a5b0c9ca1d97790134b3f`
**Synced:** 2026-09-17
**`colors_and_type.css` sha256:** `4fed9d796a0d51072802f430b9528459a5cbb9c709fa1964bf5b13f18464122a`

**Re-vendor 2026-10-08 — static-family phone gestures and placement, responsive chrome adopted (design-system @ `db9aaa8`); LIVE RENDER CHANGE FOR BOTH FIGURES, EXPORTS CHANGE ONLY IN THE STAMP, MEASURED; BOTH RENDER STAMPS ADVANCE.** Five diagram carriers are re-vendored byte-identical from design-system-ASK `db9aaa86f8c26f45ef76b2b3ff2c3b73895e8aed` (**#175**), the only owner commit after `e3e0381` to touch the static-H pattern. Modified: `diagrams-fit.js` `6fbf521f…` → `d733be35…` (sha256 `fbee0539…` → `52761ba2…`, 18,205 → 35,232 B), `diagrams-static-H-engine.js` `dbcebdb2…` → `e0892fbf…` (`e0d93429…` → `5ab7ebb3…`, 35,681 → 39,312 B) and `diagrams.css` `f6c398a3…` → `6ad733cd…` (`4bf635ce…` → `7cb3b6ca…`, 24,661 → 25,301 B). New to this bundle: `diagrams-chrome.js` `e8eed502…` (`76c7bb98…`, 19,160 B), the #175 generation of the #169 carrier, and `diagrams-pointer.js` `830a4b62…` (`620c51aa…`, 11,399 B). `export-png.js` stays at `b3e34d95…` (`09e9774e…`) and `diagrams-text-layout.js` at `62c7b8a4…` (`64ee23cf…`), both already byte-identical to the owner at `db9aaa8`. The `_dsa-surface/` carrier `surface-treatments.css` is **added** at owner bytes `1ab4e3d0…` (`484e8134…`, 20,556 B), unchanged in the owner since #169 (`53fa86e`); like the surface carriers in the entries below, it sits outside this mirror's record, and its owner pin is recorded in the commit.

**The "not vendored" decisions of #210 and #211 are reversed.** #210 left `surface-treatments.css` out because nothing here used it, and the 2026-10-06 entry below (#211) kept it out, and left `diagrams-chrome.js` out, because no page adopted the responsive chrome. Both pages now adopt it: the caption and legend sit in one `.diagram-info[data-diagram-chrome]` block behind **About** and **Legend** triggers, the header carries the `illustrative` cue, and `diagrams-chrome.js` then `diagrams-pointer.js` load after the chrome markup and before `diagrams-fit.js`, in the owner's order. The owner's chrome adoption contract takes the controlled disclosure trigger's grammar — label, indicator, hover and focus — from `surface-treatments.css`, and that trigger reached `surface-treatments.css` with #169 (2026-09-28), after #210 (2026-09-17) was decided. Each page therefore loads `surface-panel.css` and then `surface-treatments.css`, which requires it first. `index.html` is untouched and still loads no `surface-treatments.css`.

**What #175 brings, and what reaches these pages.** `diagrams-pointer.js` (v2) owns the canvas gestures: on a touch screen one finger pans the drawing from anywhere on it and two pinch it, never the page, while a press that starts on a panel stays native; `diagrams.css` adds the matching `touch-action: none` on a pointer-owned canvas's stage. Fit contract v3 adds opt-in placement: the engine's `balance` centers the drawing vertically between the chrome above and below it, and `compactClearance: 32` caps total clearance at 32px while the chrome is compact. The engine requires fit v3, and pointer v2 when the pointer is loaded, and throws a named error with an older copy, so the carriers land together.

**Measured, not assumed** — headless Chrome 155.0.8059.40 over http, the prior bundle (`84c7655`) against this one. **Export:** `PNG page` (3840 × 2880) and `PNG diagram` (`TREE_D01` 3016 × 3440, `TREE_D08` 3288 × 3440), captured as the exact Blob the download receives, in light and dark, each side run twice: each side's two runs are byte-identical; **all 4 diagram plates are byte-identical** before and after; the **4 page plates differ only inside the stamp** — the differing pixels are bounded by x 3245–3740, y 69–148 on `TREE_D01` and x 3266–3740, y 69–148 on `TREE_D08`, inside the exporter's right-anchored stamp text box — and the prior page, with only its stamp text rewritten in the DOM to the new tuple and date, exports byte-identical to this one in all 4 page plates on both runs. **Live, 1440×900:** the chrome stays wide, the stamp stays in the header and both triggers are hidden; `TREE_D01` rests exactly as before (scale 0.199524, same translation), and `TREE_D08` keeps its scale 0.218137 while `balance` lifts the drawing 47.43px (translate-y 212.86 → 165.43). A 60px mouse drag pans 60px before and after. At 900×820 the rest scale moves 0.105677 → 0.101193 (`TREE_D01`) and 0.182035 → 0.17459 (`TREE_D08`). **Live, 390×844 mobile with touch:** both pages go compact, with the triggers above the HUD and the subtitle and stamp in About; the drawing lies inside the canvas, and its rest scale rises 0.043245 → 0.113291 (`TREE_D01`) and 0.055456 → 0.170142 (`TREE_D08`). A raw 60px one-finger drag pans the drawing 60px (previously 20px); a raw two-finger spread from 100 to 200px scales the drawing ×2.00 at page zoom 1 (previously drawing ×1.00, page zoom 5). Each trigger tap toggles its `aria-expanded` false → true → false with its panel's `hidden` in step and the other panel closed, and the indicator turns from `rotate(-90deg)` closed to `none` open. **0 console errors, 0 warnings and 0 failed requests** in 28 page loads across both pages, both viewports and both themes.

**Both render stamps advance; both sources hold.** `control-surface_architecture-tree` moves `source-v7 // render-v19` → `source-v7 // render-v20` and `control-surface_intent-inbox-lifecycle` `source-v2 // render-v2` → `source-v2 // render-v3`, both dated 2026-10-08, the realization date; the `README.md` lineage tuple moves with `TREE_D01`. Per this file's rule a `render-vN` stamp advances when its render actually changes, and here the live render does — the adopted chrome and cue, the compact layout, the gestures, and `TREE_D08`'s balanced placement at 1440×900 — while the exports change only by the stamp itself. Neither `*.source.js` file changed. **No raster is owed:** no committed raster in this repo is derived from either page. The mirror pin above (`067691a`) and `colors_and_type.css` do not move: no token or font changed, and `colors_and_type.css`, `fonts-embedded.js`, the four woff2 faces, the two OFL texts, `surface-panel.css`, `surface-action.css`, `surface-shell.css`, `surface-shell.js` and the wordmark pair are byte-identical to the owner at `db9aaa8` and untouched.

**Re-vendor 2026-10-06 — attention edge by class + static-family responsive chrome (design-system @ `e3e0381`); RENDER-NEUTRAL FOR BOTH FIGURES, MEASURED; ONE INTENDED INTERACTION CHANGE.** Four diagram carriers are re-vendored byte-identical from design-system-ASK `e3e0381`, each at the generation its owner event left it — no later owner commit touches them. The `_dsa-surface/` carrier `surface-action.css` advances in the same commit for **#168** (`1c5eba6`: a third governed population, `.surface-attention-edge`, joins the shared hover and focus paint by selector grouping; the compact action's own declarations are unchanged); like the surface carriers in the 2026-09-17 entry, it sits outside this mirror's record, and its owner pin is recorded in the commit. **#169** (`53fa86e`): `diagrams-fit.js` `98ffd786…` → `6fbf521f…` (sha256 `22423770…` → `fbee0539…`, 17,332 → 18,205 B), `diagrams.css` `049b0268…` → `f6c398a3…` (`7612cc42…` → `4bf635ce…`, 16,054 → 24,661 B), `diagrams-static-H-engine.js` `70f23852…` → `dbcebdb2…` (`4c4b79fa…` → `e0d93429…`, 32,187 → 35,681 B) and `export-png.js` `395df1c9…` → `b3e34d95…` (`10556ab7…` → `09e9774e…`, 50,120 → 57,249 B). The exporter's before identity is the #145 generation that control-surface #207 vendored; the `75822177…` named in the 2026-09-03 entry below is the generation #207 replaced. `diagrams-text-layout.js` stays at `62c7b8a4…` (`64ee23cf…`), already byte-identical to the owner at `e3e0381`.

**What #169 brings, and what reaches these pages.** Fit contract v2 lets chrome declare the edge it is anchored to (`data-diagram-fit-edge`); with no declaration, which neither page authors, the defaults select exactly the caption, legend and HUD they always did. The engine now tracks whether the view is at Fit: a resize refits only a view at Fit, so a reader's own zoom or pan survives a resize, and a press that travels less than 3px does not leave Fit. The exporter keeps every caption line (it cut at three), lays the caption and legend out jointly, and fits a landscape figure below the panel band when a drawn mark would come within the panel gutter. `diagrams.css` adds the responsive-chrome rules, every one scoped to `.diagram-info` or a shell that contains it, plus `.bar .diagram-cue { display: none }` for an element neither page has. **`diagrams-chrome.js` is deliberately not vendored**: this is a targeted replacement, no page here adopts the responsive chrome (no `.diagram-info`, no `data-diagram-chrome`), and the engine runs without it — with `window.DIAGRAM_CHROME` absent, each page keeps its corner panels and header as before. `surface-treatments.css` stays not vendored, and no page here carries `.surface-attention-edge`.

**Measured, not assumed** — headless Chrome 154.0.8037.98 over http, the prior carriers against these. **Export:** `PNG page` (3840 × 2880) and `PNG diagram` (`TREE_D01` 3016 × 3440, `TREE_D08` 3288 × 3440), captured as the exact Blob the download receives, in light and dark: **8 of 8 byte-identical**, and a second run of the prior carriers byte-identical to the first. Both figures are portrait — SVG `width` × `height` **3160 × 3680** and **2104.12 × 2216** — so the landscape drawn-mark test does not run here, and each caption carries two explicit lines, so the old three-line cut never applied. **Live fit:** at 1440×900, 1600×620, 1441×903, 900×820 and 1280×560 the at-rest camera, the explicit Fit, a repeated Fit and every panel rect are identical before and after on both pages (`TREE_D01` scale 0.199524 and `TREE_D08` 0.218137 at 1440×900). Interaction at 1440×900: the zoom-out floor stays 0.15 and monotone; a resize at Fit refits on both sides (to 0.105677 and 0.182035 at 900×820), and a tap at Fit leaves the view at Fit; **after a reader zoom, a resize to 900×820 previously snapped back to Fit and now keeps the reader's view** (0.239429 and 0.261764 held) — the change #169 intends. At-rest screenshots are byte-identical at all five viewports for `TREE_D01`; on the lifecycle page a 101 × 7 px strip of the legend header alternates between the same two raster states across reloads of the prior carriers too, with identical layout rects, and is harness noise. **`index.html`:** a computed-style census of all 13 `.surface-action` and 7 `.surface-panel` elements and their `::before` / `::after`, light and dark × reduced motion `no-preference` and `reduce` × rest, forced `:hover` and forced `:focus-visible`, found **0 differences in 412,560 values** (a repeat of the prior carriers: 0); a control that perturbs one shared hover and focus declaration is detected — 832 differences, in exactly the 8 hover and focus states and none at rest. At-rest screenshots are byte-identical at 1440×900, 900×820 and 390×844 in both themes. **0 console errors** on all three pages in both themes.

**Both diagram stamps and their dates held** — `control-surface_architecture-tree` at `source-v7 // render-v19`, `control-surface_intent-inbox-lifecycle` at `source-v2 // render-v2`, both 2026-09-03 — per this file's own rule: a `render-vN` stamp advances, and its committed rasters are regenerated, only when its render actually changes, and here the render was measured not to change. No raster is owed. The mirror pin above (`067691a`) and `colors_and_type.css` do not move: no token or font changed, and `fonts-embedded.js`, the four woff2 faces, the two OFL texts, `surface-panel.css`, `surface-shell.css`, `surface-shell.js` and the wordmark pair are byte-identical to the owner at `e3e0381` and untouched.

**Re-sync 2026-09-17 (`2bbab41` → `067691a`) — CAPTION ROLE REBOUND TO 0.14em TRACKING; DIAGRAM-RENDER-NEUTRAL BY LOCAL PIN, MEASURED.** The hop crosses one `colors_and_type.css` event, **PRG-019 SL3** (`31e283e`): it adds the Tier-1 `--tracking-caption: 0.14em` and rebinds the foundation `.caption` role from `var(--tracking-wide)` (0.08em) to it. `--tracking-wide` itself is **unchanged at 0.08em**, and no other token value, role name, selector, `@font-face` or theme behavior moved — the diff is one added custom property plus one rebound declaration. SL3 is a **coupled pair upstream**: because the interactive-spine pattern's caption band set no `letter-spacing` of its own, the same owner commit pins that band explicitly to `--tracking-wide`, so a 10px chrome band does not inherit the 14px Caption role. **This bundle vendors the static-H pattern, not the spine** — there is no spine file here and none was introduced. Static-H's `diagrams.css` has carried its own `letter-spacing: 0.06em` on `.caption` since before this hop, which is why SL3 needed no companion re-pin for it: the owner's `patterns/diagram-static-H/diagrams.css` carries the identical pin at `067691a`, and this bundle's `diagrams.css` (`7612cc42…`) is byte-identical to it and untouched.

**Render-neutral for both figures, measured not assumed.** Both pages were rendered in headless Chrome 153.0.8010.48 at 1440×900 over http, before and after this re-vendor, in light and dark, and the **computed** `letter-spacing` was read from each page's actual `.caption` element: **0.6px in all eight page/state/theme combinations** (0.06em against the local 10px font-size), with `.caption b` steady at **1.54px** and the band's resolved `color` unchanged in both themes. The new token is present and resolving after the hop — `--tracking-caption` on `:root` reads **UNDEFINED → 0.14em** — so the probe demonstrably observes the change it tests for; the foundation rule simply loses the cascade, both stylesheets declaring `.caption` at equal specificity with `diagrams.css` `<link>`ed second on both pages. **Sensitivity was demonstrated by a control run**: with the local `0.06em` pin deleted from `diagrams.css` and nothing else altered, the same measurement moves **0.8px → 1.4px** across the hop — precisely the silent drift the upstream spine pin exists to prevent. Each page carries exactly **one** `.caption` element, and `--tracking-caption` has **no other consumer** in this bundle (`surface-shell.css` reads `--tracking-wide`, which did not move). Geometry corroborates: caption box **360 × 93.55** (`TREE_D01`) and **360 × 109.05** (`TREE_D08`), both at (18, 103.75), `viewBox` **3160 × 3680** and **2104.12 × 2216**, **154** and **91** SVG text primitives, all identical across the hop in both themes — but that instrument is **not independently sensitive to this change** (in the control the box stays 93.55 while the tracking does move), so the computed-style reading is the load-bearing evidence and the geometry reading establishes only that nothing else moved. The caption band is read by `diagrams-fit.js` (`topSelector: '.caption, .legend'`, chrome reservation) and by `export-png.js` (page composition); that is the path by which a tracking change would have reached figure geometry and raster output, and it is closed here because the band does not move.

**Both diagram stamps held** — `control-surface_architecture-tree` at `source-v7 // render-v19`, `control-surface_intent-inbox-lifecycle` at `source-v2 // render-v2`. The pin advance is not itself a render change, and the render was measured not to advance. **No raster is owed and none was regenerated:** the repo's five committed PNGs and one SVG are the repo banner (2752 × 1536), the site icons (`apple-touch-icon` 180 × 180, `favicon-32` 32 × 32, `favicon.svg`) and the vendored ASK wordmark pair under `_dsa-surface/assets/` — a diagram export is 3840 × 2880, and **no committed raster in this repo is derived from either page**, as the entries below also record. Every other file in this mirror is untouched and byte-identical to the owner at `067691a`: `fonts-embedded.js`, the four woff2 faces and the two OFL texts. `diagrams.css`, `diagrams-fit.js`, `diagrams-text-layout.js`, `diagrams-static-H-engine.js` and `export-png.js` are pinned separately, are already at owner parity, and are not part of this entry. The `_dsa-surface/` carriers `surface-action.css` and `surface-panel.css` advance in the same commit for **SL4** (`e7f5ec2`) and **SL7** (`881a996`); they sit outside this mirror's record, are loaded only by `index.html`, and neither diagram page reads them.

**Re-vendor 2026-09-03 — shared text-layout contract + H engine (design-system @ `2bbab417`); RENDER CHANGE for BOTH figures, stamp decision deferred to the reviewing surface.** The owner extracted text measurement and role layout out of each diagram engine into one shared carrier, `diagrams-text-layout.js` (`64ee23cf…`, 17,224 B, from `patterns/_diagram-shared/`) — **new to this bundle** — and rewrote `diagrams-static-H-engine.js` against it (`33cae0cd…` 15,947 B → `4c4b79fa…` 32,187 B). Role caps, line heights and the wrapping primitive now live in the carrier; the engine keeps no local `measure()` and no local copy of the caps. The three files land **atomically** because the engine **fails closed** twice over: it checks every callable member of the carrier's interface, and it checks that the carrier **declares `diagram-static-H`** among its targets. Both gates were exercised, not inspected — running the new engine with no `<script src="diagrams-text-layout.js">` throws `Diagram text-layout support is missing or incomplete. Load diagrams-text-layout.js before the diagram engine.` and renders **0** primitives; serving a carrier whose `TARGETS` omit this pattern throws the named target error; removing one interface member re-throws the first. `diagrams-text-layout.js` loads after `diagrams-fit.js` and immediately before the engine on both pages.

**This is NOT render-neutral, and the numbers are measured.** Long node text now **wraps** instead of widening its column, so both figures become narrower and taller: `TREE_D01` `viewBox` **5260.64 × 3548 → 3160 × 3680** (width −39.9%, height +3.7%) and `TREE_D08` **3166.24 × 2006 → 2104.12 × 2216** (width −33.5%, height +10.5%). Widest text run **1734.3 → 719.2** (`D01`) and **1461.8 → 718.5** (`D08`). Pairing every text primitive by its normalized content: **154/154** and **91/91** matched with **0 lost and 0 added** — **15** labels in `D01` and **18** in `D08` gained height by wrapping (2 lines, and 2 at 3 lines in `D01`), the rest were repositioned only. Comparing all primitives on tag, `getBBox` (2dp), text content and computed `fill` / `stroke` / `stroke-width` / `opacity` / `font-family` / `font-size` / `font-weight` / `visibility` / `display`, **355 of 355 stable rows** differ in `D01` light (357 total, the same 2 harness-unstable rows excluded), **357/357** in `D01` dark, and **181/182** in `D08` in both themes. Quality checks on the new render, with the checker's sensitivity demonstrated by an injected 400-character label it detects: **0** text primitives overflow their own node rect, **0** text-versus-text bbox collisions, **0** primitives outside the `viewBox`, **0** console or page errors, on both figures in both themes at 1440×900. Source data is untouched — neither `*.source.js` file changed, so `source-vN` holds on both figures. Because the realized render advances materially, the `render-vN` half of each stamp is a **consumer-owned decision** and is deliberately left unchanged in this record; the reviewing surface rules on it, and the `README.md` lineage line moves with it. Foundation pin `2bbab417` and `colors_and_type.css` are unchanged by this entry — see the token re-sync above. `diagrams-fit.js` (`22423770…`), `diagrams.css` (`7612cc42…`) and `export-png.js` (`75822177…`) were **already byte-identical to the owner at this pin** and are untouched.

**Re-sync 2026-09-03 (`28e9318` → `2bbab41`) — NEW ROOT-ONLY `--bg-edge` ROLE; DIAGRAM-RENDER-NEUTRAL, MEASURED.** The hop crosses **three** `colors_and_type.css` events, all one thread. **#129** (`85181c1`) introduces the Tier-1 `--bg-edge` role for the **browser / under-page edge** — the over-scroll pocket the browser paints above and below the document — binds `color-scheme` beside it, and makes the base reset paint `background-image` + `background-color` as **longhands** so the shorthand can no longer reset the solid layer to transparent; `html { background-color: var(--bg-edge) }` and `body { background-color: transparent }` close it. The block is **root-scoped on purpose**: a descendant `.theme-dark` themes its subtree but must not repaint the root-owned canvas. **#136** (`b8d1f56`) rebinds the light value from ink to `--ask-lavender-light` (`#E2D3F0`), so the light edge matches the gradient's own top-right stop instead of reading as a dark band. **#137** (`6b513cf`) is a surface-shell change that does not touch this file. Dark resolves to `--ask-ink-dark` (`#0A090C`) on all three dark paths. **No existing token value, role name, selector, `@font-face` or theme-behavior changed** — the diff is additive plus the shorthand→longhand rewrite of one existing declaration. **Neutral for the diagrams, measured not assumed:** both figures were rendered in headless Chrome at 1440×900, light and dark, before and after this re-vendor; every SVG primitive was compared on tag, `getBBox` (2dp), text content and computed `fill` / `stroke` / `stroke-width` / `opacity` / `font-family` / `font-size` / `font-weight` / `visibility` / `display` — **0 differing rows** in every page/theme combination — 357 primitives (`TREE_D01`) and 182 (`TREE_D08`) — with `viewBox` identical. Each state was captured three times and only rows stable across all three runs were compared; the projection excluded **2 rows in `TREE_D01` light** (indices 172 and 230, two descender-bearing 13px Inter labels) whose `getBBox` height flaps between 16 and ~17.5 under *identical* bytes and is therefore harness noise, not a carrier effect. The comparison's sensitivity was demonstrated by a control run in which one primitive's x was perturbed by 0.5 and detected. The role's only effect is the under-page area, which no diagram primitive occupies. Post-re-vendor the resolved values are **light `--bg-edge` `rgb(226, 211, 240)` · dark `rgb(10, 9, 12)` · `body` `background-color: rgba(0, 0, 0, 0)`** on all three pages, both themes. **Both diagram stamps held** — `control-surface_architecture-tree` at `source-v7 // render-v18`, `control-surface_intent-inbox-lifecycle` at `source-v2 // render-v1`. Every other vendored file in this mirror is untouched: `fonts-embedded.js`, the four woff2 faces and the two OFL texts are byte-identical between `28e9318` and `2bbab41`; `diagrams-fit.js`, `diagrams-static-H-engine.js`, `diagrams.css` and `export-png.js` are pinned separately and are not part of this entry.

**Re-sync 2026-08-14 (`3d8b113` → `28e9318`) — RENDER-NEUTRAL BY NON-USE:** the hop crosses **three** carrier-changing owner events. **#93** (`410b3980`) — comment/contract only: `--fg-high-contrast` moves from a *reserved* value with no approved surface to its **first approved bounded use** (the Class B message-archive ramp); no token value changed. **#103** (`8fbb0c01`) — the **value-bearing** event: `--fg-on-card` is rebound `var(--fg-1)` → `var(--fg-high-contrast)` (`#201D26`) and **both** dark-mode `--fg-on-card: var(--ask-lavender-dark)` overrides (the `[data-theme="dark"]` block and the `prefers-color-scheme` auto-bridge) are **removed**, so the role stops flipping with theme against the fixed `--surface-solid` fill it exists to sit on. **#104** (`28e93188`) — comment/contract only, and the **final vendoring pin**: it retains #103's value unchanged and replaces the bounded-use prose with the central **registered-use and admission-gate contract** for `--fg-high-contrast`. **Neutral here by non-use, not by being comment-only** — this is a real token-behavior change upstream; it simply has no consumer in this mirror: **nothing in this bundle reads `var(--fg-on-card)`** (verified — the only occurrences are the definitions inside `colors_and_type.css` itself and the historical prose below), and the carrier never consumes it. Every other vendored file is **byte-identical** between `3d8b113` and `28e9318` (`fonts-embedded.js`, the four woff2 faces, the two OFL texts); `diagrams-fit.js` / `diagrams-static-H-engine.js` / `diagrams.css` / `export-png.js` are pinned separately and are untouched. Only the new `colors_and_type.css` sha256 above differs (`246aae65…` → `acd76409…`, 13,022 → 13,375 B). **Both diagram stamps held** — `control-surface_architecture-tree` at `source-v7 // render-v18`, `control-surface_intent-inbox-lifecycle` at `source-v1 // render-v1` (render-neutral, no re-export).

**Re-sync 2026-07-22 (`1231d03` → `3d8b113`) — COMMENT-ONLY, render-neutral:** design-system PR **#88** corrected the tier-model header comment in `colors_and_type.css` — the `--ask-*` prefix is reclassified from Tier 3 to the canonical **Tier-2 implementation namespace** (travels with Tier 2 by reference), Tier 3 = the ASK name + `logo-ASK` wordmark, and the file header names the owner-carrier for **provenance**, not child-instance identity. **No token value, role name, selector, `@font-face`, or theme-behavior change** — non-comment content byte-identical; only the new `colors_and_type.css` sha256 above differs (`bcd11e0e…` → `246aae65…`). Fonts byte-identical; `diagrams-fit.js` / `diagrams-static-H-engine.js` / `diagrams.css` / `export-png.js` unchanged. The stylesheet is `<link>`ed, not inlined — no committed HTML or raster carries the comment. **Diagram stamp held `source-v5 // render-v18`** (render-neutral, no re-export).

**Re-vendor 2026-07-20 — page exporter: overlap-gated portrait composition (design-system PR #80 `2cd4610c`); RENDER CHANGE for this bundle, `render-v17 → render-v18`, source held.** The first exporter re-vendor that is **not** render-neutral here. The shared static exporter reserved a FULL-WIDTH top band for every portrait diagram, pushing a narrow tree below both corner panels and shrinking it — this bundle's D01 architecture tree (2328×2978, **portrait**) was the case ASK flagged as under-scaled. The landed owner fix (#80) is an **overlap-gated three-candidate portrait fit** (full region if it clears / measured centre lane / historical below-band fallback; `max(C,B,A)` with A = the prior placement byte-exact, so a portrait can only grow or stay equal). `export-png.js` re-vendored **byte-identical** from DS @ `2cd4610c` (blob **`2104021d…`**, prior `9b043e6f…`). **What changes:** the D01 `PNG page` composition — the tree now rises through the clear centre lane between the caveat (top-left) and legend (top-right), page-fit scale **0.668 → 0.792 (+18.5%)**, clearing all chrome and page edges with no clipping; advisor-pixel-gated light + dark from byte-parity review copies at owner head `a2dfea7`. **`PNG diagram` (chrome-free) is byte-identical** — the fix touches page composition only, not the diagram build. Because this materially advances the rendered artifact, the tuple advances to **`render-v18`** and the stamp date advances to the operation date **2026-07-20** (correcting the standing drift where the date was frozen at the `source-v4` date `2026-06-11` through render-neutral syncs; the convention is now: source/render change ⇒ date advances, byte-neutral sync ⇒ date holds). **Source held at `source-v4`** (no tree-data change). **No committed raster** exists for this maskless tree, so nothing is re-exported/committed — the render change is realised only in on-demand `PNG page` exports. `diagrams-fit.js` (`98ffd786…` #79), `diagrams-static-H-engine.js` (`385f150d…` #78), `diagrams.css` (`049b0268…`), source data, and the `_dsa-tokens` foundation pin (`1231d03`) are all **unchanged** — the interactive-spine exporter is a separate artifact and does not exist in this bundle. Exporter pin tracked in the operator consumer-ledger (item 14).

**Re-vendor 2026-07-19 — `fit()` clearance degrades continuously on a constrained axis (design-system PR #79 `99d13e67`), helper-only; live-canvas Fit change at short viewports, exporter/raster neutral, stamp held.** Follow-up to the #77/#78 entries below. The #77 helper subtracted an ABSOLUTE clearance (`avail − clearance`); on a canvas smaller than its clearance that term went non-positive and the degenerate-input guard rewrote the scale to ~maxScale, throwing content off canvas — surfaced on method-ASK's bespoke figures, not here. The owner fix degrades clearance continuously: `effectiveClearance = min(clearance, avail/2)`, so it consumes at most half a positive available axis, and the contract now reads by region (ordinary `avail ≥ 2·clearance` = exact prior arithmetic; constrained `avail < 2·clearance` = continuous degradation; panel-collision = overlap-gated). `diagrams-fit.js` re-vendored **byte-identical** from DS @ `99d13e67` (blob **`98ffd786…`**, prior `0c993163…`). **Helper-only:** `diagrams-static-H-engine.js` is unchanged — it remains current at **`385f150d…` (#78)**; `diagrams.css` (`049b0268…`), `export-png.js` (`9b043e6f…`), source data, shell chrome, and the `_dsa-tokens` foundation pin (`1231d03`) are all untouched. **What actually changes — measured base-vs-head:** the four reference viewports (`1440×900` wrap 1440×814 · `1600×620` 1600×534 · `1441×903` 1441×817 · `900×820` 900×720) are all in the *ordinary* region and apply **identical** placement. The constrained region **is reachable through the real D01 shell** at a short viewport (an earlier "shell floors its canvas at ~490×546 / never reached" claim was wrong — that minimum was an artifact of the test pane's iframe, not a shell contract; the shell CSS declares no canvas minimum). Exercised in a controlled same-origin iframe sized to `.bar` height + 120 = 220px, the real shell's canvas measured **900×119.8** (a positive constrained axis, `< 160`); there the placement **does change**: old absolute-clearance helper `scale 0.01302`, #79 continuous `scale 0.01961` — positive, on-canvas, `reserved:false clear:true` (the content at that scale clears the panels, so no reservation/degradation), and interaction was correct (zoom-out no reversal, Fit idempotent). So this is a **live-canvas Fit change at short constrained viewports, render-neutral only for the ordinary reference viewports**. **Exporter/raster neutral:** `PNG page` + `PNG diagram` byte-identical both themes (light page `76b6a387…` · dark page `316669c3…` · light diagram `76237fff…` · dark diagram `a9ebf0e3…`) — the exporter clones the rendered SVG and composes independently. *(Supplemental synthetic check, clearly synthetic: a 120px-height wrap with D01's real bounds 2328×2978 + clearance 80 gave old `0.01343` → #79 `0.02015`, matching the actual-shell direction.)* No committed raster exists, so the stamp is **held at `render-v17`** (source held at `source-v4`). Helper pin tracked in the operator consumer-ledger (item 14).

**Re-vendor 2026-07-19 — interaction floor tracks Fit (design-system PR #78 `094aa627`), export-neutral, stamp held.** Follow-up to the #77 entry below, and landed together with it in this bundle — this consumer never ran the intermediate `a47f255d…` engine. The #77 panel-aware fit can legitimately compute a scale **below** the engine's fixed zoom floor (a diagram that collides with the chrome fits smaller than it used to), and the engine then clamped zoom-out to that fixed floor — so from a fitted state both the minus button and the outward wheel **increased** the scale, reversing the control's direction. **This bundle's D01 tree is the case that surfaced it:** at 900×820 the corrected fit is `0.1273` against a `0.15` clamp. Note the reversal is *not* limited to collision cases — at 1600×620 this tree fits at `0.1487`, already below the historical floor even though #77 left that placement untouched. The owner fix makes the live floor the lower of the pattern's **own historical base floor** (`0.15` here, preserved — floors are not normalized across patterns) and the most recent Fit: minus and outward wheel now clamp to `min(0.15, latest Fit)`. **Fit itself remains unclamped** — clamping it would restore the panel collision #77 exists to remove. `diagrams-static-H-engine.js` re-vendored **byte-identical** from DS @ `094aa627` (blob `385f150d…`, prior on `main` `e0f59276…`). **Interaction-only:** `diagrams-fit.js` (`0c993163…`), `diagrams.css` (`049b0268…`), `export-png.js` (`9b043e6f…`), the source data, and the shell chrome are all unchanged, as is the `_dsa-tokens` foundation pin (`1231d03`). **Export-neutral, measured:** `PNG page` + `PNG diagram` byte-identical in both themes; no committed raster exists, so the stamp is **held at `render-v17`** (source held at `source-v4`). Engine pin tracked in the operator consumer-ledger (item 14).

**Re-vendor 2026-07-19 — DS fit contract: `fit()` reserves the measured glass-panel band (design-system PR #77 `a7e1d36`), export-neutral, stamp held.** Every DS diagram engine computed `fit()` from the full `canvas-wrap` and reserved nothing for the top-corner **caption** / **legend** or the bottom **HUD** glass panels, so a diagram could render its edge bands *underneath* the chrome. The collision is between SVG content and **HTML chrome**, which no SVG bbox check sees. The landed owner fix extracts one shared, pure measurement utility — **`diagrams-fit.js`, new to this bundle** (blob `0c993163…`, byte-identical to the owner) — and is **overlap-gated**: it computes the caller's prior transform first and returns it untouched when the content already clears the gutter-inflated chrome, activating a four-edge safe rectangle **only** on a demonstrated collision. `diagrams-static-H-engine.js` re-vendored **byte-identical** from DS @ `a7e1d36` (blob `a47f255d…`, prior `e0f59276…`); the engine now **fails closed** with a named error if the helper is absent, so a partial re-vendor cannot look current while keeping the old geometry. `diagrams-fit.js` loads immediately **before** the engine in the shell. `diagrams.css` (`049b0268…`) and `export-png.js` (`9b043e6f…`) were already current at `a7e1d36` — **unchanged**, and the `_dsa-tokens` foundation pin (then-current `1231d03`) is untouched (neither the helper nor the engine is a mirror file). **Export-neutral, measured not assumed:** `PNG page` + `PNG diagram` were captured from the live exporter under both the prior and current engines in both themes and are **byte-identical** in all four combinations (light page `76b6a387…` 4,173,211 B · dark page `316669c3…` 5,143,409 B · light diagram `76237fff…` 3,925,764 B · dark diagram `a9ebf0e3…` 5,203,903 B) — the static exporter clones the rendered SVG and performs its own poster composition, so it never reads the live stage transform. No committed raster exists for this maskless tree, so nothing is re-exported and the `render-vN` stamp is **held at `render-v17`** (source held at `source-v4`). **Live-canvas placement is unchanged at 6 of 8 tested viewport/theme combinations** (exact prior transform: 1440×900 · 1600×620 · 1441×903, both themes) and changes only at narrow **900×820**, where the prior fit genuinely collided with all three panels (legend 75×107 · caption 187×72 · HUD 176×12) and the corrected fit clears them at a smaller scale (0.2095 → 0.1273); that viewport is a pan/zoom overview state, not a read-all state. Engine + helper pins tracked in the operator consumer-ledger (item 14).

**Re-vendor 2026-07-17 — `diagrams-static-H-engine.js` renders group notes + drops section-note dead space (design-system PR #74 `bb00558`), render-neutral for this bundle, stamp held.** Two halves of one invariant (*measured content must be rendered content*) were repaired upstream: a `kind: 'group'` note was measured into column width and granted the taller 44px box, then the `group` branch drew rect + label and `continue`d — the note was **never emitted**; and an unrendered **section** note still bought box height (the vertical half of the width-only fix in DS #32). `diagrams-static-H-engine.js` re-vendored **byte-identical** from DS @ `bb00558` (md5 `c29e43a6`). **Render-neutral for this bundle** — the architecture tree authors **no group notes** and **no section notes** (its 9 sections carry tags, and a section tag earns the tall box under both the old and new predicate), and it has **no leaf sections**, so nothing cascades. Neutrality was **measured, not assumed**: the page was rendered in-browser with real tokens + fonts under both engines and the serialized SVG is byte-identical (28,554 chars, identical hash, `viewBox 2328.81×2978`, 126 text elements, 0 overflow). The `render-vN` stamp is therefore **held at `render-v17`** (source held at `source-v2`). No committed raster (maskless tree) → nothing to re-export. The `_dsa-tokens` foundation pin (then-current `1231d03`) is untouched — the engine is not a mirror file. Engine pin (DS `bb00558`) tracked in the operator consumer-ledger (item 13).

**Re-vendor 2026-07-13 — `export-png.js` direct-`<defs>` carry fix (design-system PR #72 `5674b46`), render-neutral for this bundle, stamp held.** The shared static exporter cloned only the live SVG's direct `<g>` content layers into the raster, never its direct `<defs>`, so a figure referencing a mask / clipPath / gradient / marker via `url(#id)` from a direct `<defs>` exported a **dangling reference** (e.g. a negative-cutout wash filled solid). The landed fix clones `:scope > defs` into the export content in both the page and diagram paths. `export-png.js` re-vendored **byte-identical** from DS @ `5674b46` (md5 `a91d9548`). **Exporter-only** — tokens, fonts, `diagrams.css`, the engine, and the `_dsa-tokens` mirror pin (then-current `1231d03`) are unchanged. **Render-neutral for this bundle** — `control-surface_architecture-tree` is a maskless tree with no committed raster and no direct-`<defs>` reference, so its output is unchanged and the diagram `render-vN` stamp is **held** (`render-v17`); the fix only affects figures that reference a direct `<defs>`. Smoke-tested: `PNG page` + `PNG diagram` export cleanly in both themes. Exporter pin tracked in the operator consumer-ledger.

**Re-vendor 2026-07-10 — native `file://` export via embedded-font carrier (design-system PR #62 `44c6074`), render-neutral for http, stamp held.** Supersedes #61's *goal* while keeping #61's fail-closed behavior as the floor: a double-clicked (`file://`) diagram now exports a correct PNG with **no server**. **Not exporter-only** — this re-vendor **adds** `fonts-embedded.js` to this mirror (the DS-generated embedded-font carrier + integrity manifest, md5 `ffb61b1e`), and the diagram HTML now loads `<script src="./_dsa-tokens/fonts-embedded.js">` **before** `export-png.js`. `export-png.js` re-vendored **byte-identical** from DS @ `44c6074` (md5 `9cb7a354`): it prefers the carrier (no fetch → works under `file://`), falls back to the http woff2 fetch, and still fails CLOSED — now **manifest-backed**, so an incomplete carrier is caught even under `file://` — if neither fully embeds. `colors_and_type.css` / fonts / the pin (then-current `1231d03`) are unchanged (the carrier is generated FROM them). **Render-neutral for http** — the successful http export output is byte-identical (carrier `@font-face` bytes == fetch bytes), so the diagram `render-vN` stamp is **held**. Exporter + carrier pins tracked in the operator consumer-ledger (item 10; item 9 remains the fail-closed floor).

**Re-vendor 2026-07-10 — `export-png.js` fail-closed under `file://` (design-system PR #61 `ed64b42`), render-neutral for http, stamp held.** Follow-up to #60: the exporter now **fails closed** when it can't embed the fonts — under a `file://` page (Chromium blocks the woff2 fetch) or any incomplete embed it blocks the export with a "serve over http" warning instead of silently emitting a fallback-font (clipped) PNG. `export-png.js` re-vendored **byte-identical** from DS @ `ed64b42` (md5 `04aa5177`). **Exporter-only** — tokens/fonts/`diagrams.css`/engine unchanged; the `_dsa-tokens` mirror pin (then-current `1231d03`) is untouched. **Render-neutral for this bundle** — the successful http export output is unchanged (this diagram renders over http); the guard only blocks broken `file://` exports, so the `render-vN` stamp is **held**. Exporter pin tracked in the operator consumer-ledger (item 9).

**Re-vendor 2026-07-10 — `export-png.js` font-embed fix (design-system PR #60 `9b05d9a`), render-neutral for this bundle, stamp held.** The shared raster exporter now embeds the page's own `@font-face` faces (base64) into the exported SVG `<defs>` before rasterizing — fixing right-edge node-text clipping in headless / font-absent PNG renders (SVG-as-image is font-isolated from the document's web fonts). `export-png.js` re-vendored **byte-identical** from DS @ `9b05d9a` (the four static copies are byte-identical). **Exporter-only** — tokens, fonts, `diagrams.css`, and the engine are unchanged; the `_dsa-tokens` mirror pin (then-current `1231d03`) is untouched. **Render-neutral for this bundle** (no committed raster; visual output is unchanged where the fonts are present, which is how this diagram renders), so the diagram `render-vN` stamp is **held**; the fix corrects only headless / font-absent exports. Exporter pin tracked in the operator consumer-ledger.

**Re-sync 2026-06-26 (`b5d158e` → `1231d03`) — COMMENT-ONLY, render-neutral:** design-system PR #56 corrected two stale **comments** in `colors_and_type.css` ("five-color core" header → "a core identity set"; "Core 5 — backgrounds + text" block label → "Core set — backgrounds, wordmark, dark-mode text"). **No token value, role name, selector, or behavior change** — only the new `colors_and_type.css` sha256 (then-current `bcd11e0efeae2851c8653a425f94a76cb6423c770e23cb18b3a0315519a7375f`) differs. Fonts byte-identical; `diagrams.css` / engine / `export-png.js` unchanged. **Diagram `render-vN` stamp held.**

**Re-sync 2026-06-26 (`2e1ab4c` → `b5d158e`) — RENDER-NEUTRAL conformance:** picks up the light-mode foreground conformance (design-system PR #52) and the diagram foreground-alias de-dup (PR #53). In `colors_and_type.css`: `--ask-white`/`--fg-1` comments corrected (white = wordmark, not body text), `--ask-fg-light` (`#6A637F`) + `--fg-high-contrast` (reserved `#201D26`) added, `--fg-on-card` rebound to `var(--fg-1)`, `.bg-ask-light` text white→`var(--fg-1)`. In `diagrams.css`: the scoped text roles `--diagram-ink/muted/faint` now **alias** `var(--fg-1/-2/-3)` instead of hardcoding the ramp (redundant dark-text redefs dropped; structural strokes stay local). **Resolved values are unchanged in both themes** — this diagram uses none of the rebind-affected roles (`--fg-on-card` / `.bg-ask-light`), and `--fg-1` still resolves to `#6A637F`. Only `colors_and_type.css` + `diagrams.css` changed; the four font files are byte-identical; the diagram engine / `export-png.js` were already current. **Diagram `render-vN` stamp held** (render-neutral).

| File | Upstream source | Role |
|---|---|---|
| `colors_and_type.css` | `/colors_and_type.css` | Tier 1 + Tier 2 tokens + `@font-face` (light default · `[data-theme="dark"]` · `prefers-color-scheme` auto-bridge) |
| `fonts-embedded.js` | generated from `/colors_and_type.css` + `/fonts/` by `/tools/gen-embedded-fonts.js` | embedded-font carrier (`window.DSA_EMBEDDED_FONTS` + integrity manifest) — enables offline `file://` PNG export; load before `export-png.js` |
| `fonts/InterVariable.woff2` | `/fonts/` | display family |
| `fonts/InterVariable-Italic.woff2` | `/fonts/` | display italic |
| `fonts/JetBrainsMono.woff2` | `/fonts/` | mono family |
| `fonts/JetBrainsMono-Italic.woff2` | `/fonts/` | mono italic |
| `fonts/Inter-OFL.txt`, `fonts/JetBrainsMono-OFL.txt` | `/fonts/` | SIL OFL license texts |

Re-sync this mirror and advance the pin above when the upstream tokens or fonts
change. Then classify the effect on each consuming diagram under its own
`source-vN // render-vN` contract: advance a diagram's `render-vN` stamp, and
regenerate its committed rasters, only when its render actually changes — as the
entries above do. A re-sync or pin advance does not by itself change a render.
