From c0b500b6928a1294f81bd8c7c637e18562119520 Mon Sep 17 00:00:00 2001 From: Marcel Date: Thu, 28 May 2026 15:49:23 +0200 Subject: [PATCH] feat(stammbaum): render generation gutter on the family tree (#689) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The gutter sits 100 px to the left of the tree canvas on md+ viewports (hidden entirely below md to preserve scrollable area on phones — see spec's deliberate dual-audience trade-off). Per occupied generation row it draws: - A full-width decorative stripe rect alternating transparent and var(--c-gutter-stripe). aria-hidden because it carries no meaning. - The label `G{n}` at the left edge, sourced from the un-shifted node.generation value (never the post-normalise rank), wrapped in `` so screen readers announce the full word instead of "G three". CSS adds --c-gutter-stripe in both the light root and the dark mode blocks (8% / 14% mint over canvas — decorative contrast carve-out). Browser tests cover label rendering, the ARIA wrapper, and the viewport-below-md absent-gutter path via a matchMedia stub. Existing StammbaumTree structural-invariant tests still pass since none of them assert anything inside the gutter region. Refs #689 Co-Authored-By: Claude Opus 4.7 --- .../lib/person/genealogy/StammbaumTree.svelte | 92 ++++++++++++++++++- .../genealogy/StammbaumTree.svelte.test.ts | 66 +++++++++++++ frontend/src/routes/layout.css | 13 +++ 3 files changed, 168 insertions(+), 3 deletions(-) diff --git a/frontend/src/lib/person/genealogy/StammbaumTree.svelte b/frontend/src/lib/person/genealogy/StammbaumTree.svelte index 1e74682e..7cfbddd1 100644 --- a/frontend/src/lib/person/genealogy/StammbaumTree.svelte +++ b/frontend/src/lib/person/genealogy/StammbaumTree.svelte @@ -1,7 +1,13 @@