v0.13.5-pl.1
Step 4 follow-up — tick-label typography wiring.
Wires the eight tickLabel* typography attributes (font family, size, weight, style, line height, letter spacing, text transform, text decoration) to the rendered tick <text> elements. The margin algorithm already adapted to the chosen typography in v0.13.4, but the visible labels themselves were never restyled — editor labels picked up only the wrapper's default typography, and the frontend hardcoded an empty bundle into the measurer.
The fix mirrors GPX Map's tooltip-typography pattern: typography travels as eight --kntnt-gpx-blocks-elevation-tick-label-* CSS custom properties on the block wrapper, consumed by a SCSS rule on the chart SVG that turns each into a font-* / letter-spacing / text-* declaration with inherit as fallback. CSS inheritance becomes the single source of truth for both the visible tick labels and the measurer's hidden measurement nodes, eliminating the editor/frontend/measurer divergence that the rebuild targets.
Notable refactors:
- New shared
Rendering\Typography_Sanitizerclass (sibling ofColor_Sanitizer) hosts the eight allow-list sanitisers — extracted verbatim fromRender_Map's private statics. createTextMeasurer( svg )returns(text: string) => TextMeasurement;computeMargins( data, measure )drops its typography argument.chart.tsxretains thetypographyprop solely as auseLayoutEffectdep-list trigger, pinned by a new Strategy-B test.
Test additions: 31 cases for Typography_Sanitizer, two cases for Render_Elevation (custom-property emission + sanitiser rejection), two cases for <Chart> (no-inline-on-<text> + remeasure-on-typography-change), one SCSS contract pin.
Full follow-up details in docs/elevation-rebuild.md § Step 4 recap.