refactor: split concepts.page into 6 sections, fix dead highlighting (RD-24)

The page held six teaching sections and a 142-line `styles:` block, at 471
effective lines against a limit of 250. It is now 36 lines of composition.

Angular scopes a component's CSS to markup that component rendered, so the
split had to move each rule to its owner. `concept-card` owns the card
vocabulary and renders it. `.app-code`, `.app-lead`, `.app-cols` and
`.app-note` become globals, because their targets are projected or arrive
through `[innerHTML]`.

That constraint exposed a live bug. The syntax-highlighting rules compiled to
`pre[_ngcontent-%COMP%] .k[_ngcontent-%COMP%]`, but `highlight-ts` injects the
`.k`/`.s`/`.c` spans through `[innerHTML]`, so they carry no scope attribute
and the rule never matched. Keywords, strings and comments have always
rendered in the plain foreground colour. The rules are global now, on five new
`--app-code-*` tokens.

Widen the colour guard while here: it scanned only `*.component.ts`, so every
`*.page.ts`, `*.section.ts` and `*.step.ts` was invisible to it. That is how
this page collected 21 hardcoded colours. One other file needed a fix.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
eho
2026-09-04 23:44:01 +02:00
co-authored by Claude Sonnet 5
parent d5a7a25a78
commit 630d68045f
13 changed files with 908 additions and 488 deletions
+7 -4
View File
@@ -1,7 +1,9 @@
#!/usr/bin/env bash
# WP-02 token guard: fail if any *.component.ts hardcodes a colour (hex/rgb/hsl)
# instead of a --rhc-*/--app-* design token. Palette values live ONLY in the
# styles.scss token bridge (the one exempt file — it IS the bridge).
# WP-02 token guard: fail if any *.ts file hardcodes a colour (hex/rgb/hsl) instead of
# a --rhc-*/--app-* design token. Specs and stories are exempt — they legitimately show
# colour swatches. Palette values live ONLY in the styles.scss token bridge (the one
# exempt file — it IS the bridge). Widened from *.component.ts to *.ts in RD-24: a
# *.page.ts, *.section.ts or *.step.ts hardcoding a colour was invisible before that.
#
# px/rem are deliberately NOT grepped: too many false positives (font sizes,
# transforms, media queries). Raw border widths are fixed by hand and mapped to
@@ -11,7 +13,8 @@
# false positive (a colour word inside a comment or a data-URI). Keep the bar high.
set -uo pipefail
hits=$(grep -rnE '#[0-9a-fA-F]{3,8}\b|rgba?\(|hsla?\(' apps libs --include='*.component.ts' | grep -v 'token-ok' || true)
hits=$(grep -rnE '#[0-9a-fA-F]{3,8}\b|rgba?\(|hsla?\(' apps libs --include='*.ts' \
| grep -vE '\.(spec|stories)\.ts:' | grep -v 'token-ok' || true)
if [ -n "$hits" ]; then
echo "$hits"
echo 'FAIL: hardcoded colours in components (use --rhc-*/--app-* tokens, or add a `token-ok` marker + reason)'