@conciso/design-system-angular 2.7.0 → 2.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@conciso/design-system-angular",
3
- "version": "2.7.0",
3
+ "version": "2.7.1",
4
4
  "description": "Angular-Wrapper-Komponenten für das Conciso Design System — dünne Hüllen über der framework-agnostischen CSS-Schicht (@conciso/design-system). Liefert kein eigenes CSS.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1809,8 +1809,9 @@ declare class SectionComponent {
1809
1809
  * `1`) macht die Ebene explizit, `.hero-image-caption-title` ist reine CSS-Klasse
1810
1810
  * und trägt keine Heading-Semantik, das Styling bleibt in beiden Fällen identisch.
1811
1811
  *
1812
- * **Entscheidung 3 — `objectPosition` als Style-Binding, die eine Ausnahme von
1813
- * Spec-Randbedingung 6.** Der Bildausschnitt ist eine Eigenschaft des konkreten
1812
+ * **Entscheidung 3 — `objectPosition` als Style-Binding, bewusste Ausnahme von
1813
+ * der Regel, dass Mockup-Inline-Styles nicht in den Wrapper wandern.** Der
1814
+ * Bildausschnitt ist eine Eigenschaft des konkreten
1814
1815
  * Bildes (Motiv, Kopfposition), nicht der Seite — anders als z. B. eine
1815
1816
  * Sektionsfläche, die vom Seitenkontext abhängt. `docs/index.html` setzt ihn
1816
1817
  * deshalb an jedem Hero individuell direkt am `<img>` (z. B. `object-position:center
@@ -1886,12 +1887,11 @@ declare class HeroImageComponent {
1886
1887
  * umgebendes `<cds-stoerer-set>` bleibt eine Kachel deshalb unsichtbar: Angular hängt
1887
1888
  * projizierten Inhalt ohne passendes `<ng-content>`-Ziel nicht ins DOM.
1888
1889
  *
1889
- * **Entscheidung — Icon als projizierter Inhalt.** Wie in Ticket 05 (`cds-icon-card`,
1890
- * `.scratch/angular-seitenbausteine/issues/05-icon-karte.md`, Abschnitt „Entscheidung:
1891
- * Icon als projizierter Inhalt“) sind die Störer-Icons im Mockup wechselnde
1890
+ * **Entscheidung — Icon als projizierter Inhalt.** Wie bei `cds-icon-card` sind die
1891
+ * Störer-Icons im Mockup wechselnde
1892
1892
  * Heroicons, keine DS-Bereichsglyphen aus der Registry — Inhalt, nicht Chrom. Deshalb
1893
1893
  * Projektion über `<ng-content select="[cdsIcon]">` statt eines `icon`-Inputs.
1894
- * Abweichend von Ticket 05 trägt das projizierte `<svg>` die Klasse `stoerer-icon`
1894
+ * Abweichend von `cds-icon-card` trägt das projizierte `<svg>` die Klasse `stoerer-icon`
1895
1895
  * selbst (zusätzlich zu `cdsIcon`, `viewBox`, `aria-hidden="true"`,
1896
1896
  * `focusable="false"`): `.ep-card-icon` ist dort ein Container, der die Größe per
1897
1897
  * Nachfahren-Selektor (`.ep-card-icon svg`) an ein unverändertes Kind durchreicht.
@@ -1940,8 +1940,7 @@ declare class StoererComponent {
1940
1940
  * `<cds-stoerer>`-Kacheln, das auf der Startseite oben rechts über dem Hero-Bild
1941
1941
  * liegt. Der Positionsrahmen `.stoerer-hero` (umschließt Hero-Bild UND Set,
1942
1942
  * `container-type:inline-size` für die Container-Query-Schwelle) ist bewusst NICHT
1943
- * Teil dieser Komponente, sondern bleibt beim Konsumenten (siehe
1944
- * `.scratch/angular-seitenbausteine/issues/03-stoerer.md`): er umschließt Hero UND
1943
+ * Teil dieser Komponente, sondern bleibt beim Konsumenten: er umschließt Hero UND
1945
1944
  * Set gemeinsam, das könnte diese Komponente als internes Detail nicht leisten, ohne
1946
1945
  * das Hero-Bild selbst zu kennen.
1947
1946
  *
@@ -1963,8 +1962,8 @@ declare class StoererComponent {
1963
1962
  * hat ausschließlich `<li>` als direkte Kinder (`ul.stoerer-list > *` → `["LI","LI"]`),
1964
1963
  * `<cds-stoerer>` selbst taucht im gerenderten DOM nirgends auf — Angular hängt
1965
1964
  * unprojizierten Content ohne passendes `<ng-content>`-Ziel gar nicht erst ein, exakt
1966
- * wie bei `<cds-area-tab>` innerhalb von `<cds-area-tabs>`. Ein `items`-Array (die im
1967
- * Ticket vermerkte Alternative) hätte denselben DOM-Baum ergeben, aber den
1965
+ * wie bei `<cds-area-tab>` innerhalb von `<cds-area-tabs>`. Ein `items`-Array (die
1966
+ * erwogene Alternative) hätte denselben DOM-Baum ergeben, aber den
1968
1967
  * Konsumenten gezwungen, das projizierte Icon jeder Kachel in ein Datenobjekt
1969
1968
  * umzuziehen; mit dieser Lösung bleibt die deklarative, Content-projizierende API
1970
1969
  * erhalten.
@@ -2067,7 +2066,7 @@ declare class LinkCardComponent {
2067
2066
  *
2068
2067
  * **Entscheidung 1 — `href` entscheidet zwischen `<a>` und `<article>`.** Die
2069
2068
  * Doku-Beispiele zeigen die Featured-Card ausschließlich als Link
2070
- * (`a.card.card-elevated.card-featured`), das Ticket verlangt aber ausdrücklich eine
2069
+ * (`a.card.card-elevated.card-featured`), diese Komponente unterstützt aber ausdrücklich eine
2071
2070
  * Variante ohne `<a>`. `.card-elevated` ist nach `CONTRIBUTING.md` §4 („Elevation =
2072
2071
  * Interaktivität“) im CSS auf `a.card-elevated` gescoped — eine `<article>` bekäme
2073
2072
  * den Schatten mit gesetzter Klasse ohnehin nicht. Die Komponente führt die Klasse
@@ -2114,9 +2113,9 @@ declare class LinkCardComponent {
2114
2113
  *
2115
2114
  * **Entscheidung 4 — kein CTA- und kein Meta-Input.** Die Doku-Vorlage zeigt
2116
2115
  * zusätzlich einen Meta-Strip (Datum/Ort/Format) und einen `.card-cta-link`-Fuß;
2117
- * das Ticket benennt als API aber nur `title`/`text`/`imageSrc`/`imageAlt`/`href`/
2118
- * `pill`/`area`. Diese Komponente bildet exakt diese Fläche ab, ohne Inputs zu
2119
- * erfinden, die das Ticket nicht vorsieht — ein Meta-Strip oder ein CTA-Fuß wären
2116
+ * diese Komponente benennt als API aber nur `title`/`text`/`imageSrc`/`imageAlt`/`href`/
2117
+ * `pill`/`area`. Diese Komponente bildet exakt diese Fläche ab, ohne zusätzliche Inputs zu
2118
+ * erfinden — ein Meta-Strip oder ein CTA-Fuß wären
2120
2119
  * eine spätere, eigene Erweiterung.
2121
2120
  *
2122
2121
  * Verwendungsguidance dieser Gruppe: siehe Card (`komponenten-cards-teaser-card--verwendung`).
@@ -2237,7 +2236,7 @@ declare class FeaturedCardComponent {
2237
2236
  *
2238
2237
  * **Entscheidung 3 — kein `cdsIconCards`-Raster.** `.ep-cards` ist ein reines
2239
2238
  * `display:grid` ohne Struktur oder Verhalten (dieselbe Begründung wie beim Verzicht
2240
- * auf einen `layout-grid`-Wrapper, siehe `spec.md`). Konsumenten schreiben
2239
+ * auf einen `layout-grid`-Wrapper). Konsumenten schreiben
2241
2240
  * `<div class="ep-cards">` von Hand (siehe Story „Im Raster“).
2242
2241
  *
2243
2242
  * Verwendungsguidance dieser Gruppe: siehe Card (`komponenten-cards-teaser-card--verwendung`).
@@ -2428,7 +2427,7 @@ declare class FeatureComponent {
2428
2427
  * bereits). Trotzdem baut diese Komponente die `.btn`-Klassen direkt zusammen
2429
2428
  * (Präzedenzfall `download-cta.component.ts`), aus einem härteren Grund als dort:
2430
2429
  * `cds-button` rendert IMMER ein `<button>` — sein Input-Vertrag
2431
- * (`ButtonComponentInputs`) kennt kein `href` — und kann die vom Ticket geforderte
2430
+ * (`ButtonComponentInputs`) kennt kein `href` — und kann die hier nötige
2432
2431
  * Verzweigung „`primaryHref` gesetzt → `<a>`“ strukturell gar nicht erfüllen. Ein
2433
2432
  * projiziertes `<cds-button>` brächte hier also kein Custom-Element-Layoutproblem
2434
2433
  * (kein Kindselektor an `.ep-cta-band` hängt von der DOM-Tiefe ab), sondern schlicht
@@ -2447,9 +2446,7 @@ declare class FeatureComponent {
2447
2446
  * Farbe wie das Band darunter — unsichtbar. Eine zweite Aktion hätte deshalb
2448
2447
  * zwangsläufig dieselbe Optik wie die erste getragen, keine Hierarchie, nur zwei
2449
2448
  * gleich gewichtete Buttons. Das ist eine CSS-Lücke (kein kontrastsicherer
2450
- * sekundärer On-Band-Stil), festgehalten in
2451
- * `.scratch/angular-seitenbausteine/issues/16-css-luecke-zweite-aktion-auf-band.md`
2452
- * — gemeldet, nicht in diesem Wrapper improvisiert. Solange sie besteht, trägt
2449
+ * sekundärer On-Band-Stil) — gemeldet, nicht in diesem Wrapper improvisiert. Solange sie besteht, trägt
2453
2450
  * `cds-cta-band` nur eine Aktion; ein Konsument mit echtem Bedarf für eine zweite
2454
2451
  * schreibt sie außerhalb der Komponente ins Band hinein (`<ng-content>` gibt es
2455
2452
  * hier bewusst nicht, um genau das nicht als unterstützten Pfad zu suggerieren).
@@ -2586,12 +2583,12 @@ interface CdsFactsItem {
2586
2583
  * :638–642`). Ungesetzt (Default) bleibt `<dt>` ohne zusätzliche Klasse, erbt also
2587
2584
  * die umgebende Textfarbe — das deckt Kontexte ohne Bereichsbindung ab.
2588
2585
  *
2589
- * **Über die Ticket-API hinaus:** `area` stand nicht in der ursprünglichen
2590
- * API-Skizze von Ticket 08. Ergänzt, weil ohne ihn KEINES der 3 realen
2586
+ * **Über die ursprüngliche API hinaus:** `area` stand nicht in der ursprünglichen
2587
+ * API-Skizze. Ergänzt, weil ohne ihn KEINES der 3 realen
2591
2588
  * `.ep-facts`-Vorkommen originalgetreu nachgebaut werden könnte — anders als bei
2592
2589
  * `cds-tier`s `area` (dort deckt die Einschränkung eine tatsächliche CSS-Lücke
2593
2590
  * ab) fehlt hier keine CSS-Regel, nur ein API-Hook auf eine bereits vollständige
2594
- * Klasse. Siehe Ticket-Bericht für die Abwägung.
2591
+ * Klasse.
2595
2592
  */
2596
2593
  declare class FactsComponent {
2597
2594
  /** Fakten-Paare (`<dt>`/`<dd>`), in Darstellungsreihenfolge. */
@@ -2610,8 +2607,7 @@ declare class FactsComponent {
2610
2607
  * Nav-Einträge „Standard“ und „Gestreift“). Ausgezählt: außerhalb von `sec-table`
2611
2608
  * selbst kommt `.tbl-wrap` nur zweimal vor, beide auf Beitragsseiten
2612
2609
  * (`docs/index.html:8622`, `15080`) — keine der 24 Beispielseiten außerhalb von
2613
- * Wissensbeiträgen setzt aktuell eine Tabelle ein. Neuntes Ticket der
2614
- * Seitenbausteine-Serie.
2610
+ * Wissensbeiträgen setzt aktuell eine Tabelle ein.
2615
2611
  *
2616
2612
  * **Kein Daten-Input.** Eine `columns`/`rows`-API würde Zellinhalte auf Strings
2617
2613
  * festlegen; die Beispielseiten setzen darin Badges, Links und `data-num`
@@ -2620,7 +2616,7 @@ declare class FactsComponent {
2620
2616
  * Hülle: `.tbl-wrap`, `.tbl`, `<caption>` und die Striped-Klasse.
2621
2617
  *
2622
2618
  * **`caption` ist Pflicht (`input.required<string>()`), abweichend von der
2623
- * Ticket-Skizze (dort `caption? = ''`).** Die eigene Doku dieser Komponente
2619
+ * ursprünglichen Skizze (dort `caption? = ''`).** Die eigene Doku dieser Komponente
2624
2620
  * (`storybook-angular/src/docs/komponenten/tabelle.mdx:137`) nennt `<caption>`
2625
2621
  * ausdrücklich „Pflicht, Screenreader lesen den Titel vor, bevor die Zellen
2626
2622
  * vorgelesen werden“ und wiederholt das in den Dos (`tabelle.mdx:147`:
@@ -2654,7 +2650,7 @@ declare class FactsComponent {
2654
2650
  * fix (kein Tag-Wechsel wie bei `cdsIconCard`), aber `.tbl-wrap` bräuchte dann
2655
2651
  * ein ZWEITES Element, das der Konsument von Hand um die Tabelle schreiben
2656
2652
  * müsste (`<div class="tbl-wrap" tabindex="0" role="region" aria-label="…">
2657
- * <table cdsTable>…`) — genau die beiden Aufgaben, die laut Ticket am ehesten
2653
+ * <table cdsTable>…`) — genau die beiden Aufgaben, die am ehesten
2658
2654
  * vergessen werden (fokussierbarer, benannter Scroll-Container), blieben dann
2659
2655
  * beim Konsumenten statt bei der Komponente. Der Element-Selektor hält Wrap und
2660
2656
  * Tabelle zusammen in einem Template.
@@ -2683,8 +2679,7 @@ declare class FactsComponent {
2683
2679
  * **`.tbl-sort` bleibt außen vor.** Die Klasse existiert
2684
2680
  * (css/components.css:1477–1482), die Sortierlogik nicht — kein zugehöriges
2685
2681
  * JS in `docs/main.js` für die Beispielseiten. Ein Wrapper, der nur den
2686
- * Button-Look lieferte, täuschte Funktion vor, die es nicht gibt. Siehe
2687
- * `.scratch/angular-seitenbausteine/issues/19-fehlende-sortierlogik-tbl-sort.md`.
2682
+ * Button-Look lieferte, täuschte Funktion vor, die es nicht gibt.
2688
2683
  */
2689
2684
  declare class TableComponent {
2690
2685
  /** Überschrift der Tabelle (`<caption>`, erstes Kind) — Pflicht, siehe Klassendoku. */
@@ -2729,8 +2724,7 @@ interface CdsCompareRow {
2729
2724
  * Compare (`cds-compare`) — Wrapper um `.ep-compare*` aus css/components.css
2730
2725
  * (css/components.css:1275–1294): die aufklappbare Vergleichstabelle für den zeilenweisen
2731
2726
  * Direktvergleich mehrerer Pakete/Tarife (Doku-Site `sec-table`, Nav-Eintrag
2732
- * „Vergleichstabelle (aufklappbar)“, `docs/index.html:5182–5204`). Zehntes Ticket der
2733
- * Seitenbausteine-Serie, nach `cds-table` (Ticket 09).
2727
+ * „Vergleichstabelle (aufklappbar)“, `docs/index.html:5182–5204`), nach `cds-table`.
2734
2728
  *
2735
2729
  * **Mit Daten-Input, anders als `cds-table`.** `cds-table` projiziert `<thead>`/`<tbody>`
2736
2730
  * unverändert per `<ng-content>`, weil seine Zellen Badges, Links und `data-num` tragen können
@@ -2753,7 +2747,7 @@ interface CdsCompareRow {
2753
2747
  * (WCAG 1.4.1), der `.sr-only`-Text ist deshalb kein optionaler Zusatz, sondern fest verdrahtet,
2754
2748
  * nicht per Input überschreibbar.
2755
2749
  *
2756
- * **`caption` ist Pflicht (`input.required<string>()`), abweichend von der Ticket-Skizze (dort
2750
+ * **`caption` ist Pflicht (`input.required<string>()`), abweichend von der ursprünglichen Skizze (dort
2757
2751
  * kein Input dafür vorgesehen) — dieselbe Begründung wie bei `cds-table`.** Die eigene Doku
2758
2752
  * (`storybook-angular/src/docs/komponenten/tabelle.mdx:91`) nennt `<caption class="sr-only">`
2759
2753
  * ausdrücklich als Teil des Bauteils, und das einzige reale Vorkommen hat eine. Anders als bei
@@ -2762,7 +2756,7 @@ interface CdsCompareRow {
2762
2756
  * direkt in die Tabelle springen, ohne den Summary-Text erneut vorgelesen zu bekommen.
2763
2757
  *
2764
2758
  * **`rowsLabel` (erste Kopfzelle, `<th scope="col">Funktion</th>` im Mockup) ist dagegen Beiwerk,
2765
- * optional mit Default `''`.** Auch dafür sieht die Ticket-Skizze keinen Input vor. Den Text fest
2759
+ * optional mit Default `''`.** Auch dafür sieht die ursprüngliche Skizze keinen Input vor. Den Text fest
2766
2760
  * im Template zu verdrahten hieße, AI.Box-Copy in einen wiederverwendbaren Wrapper zu backen
2767
2761
  * (ADR-0007 §2); ihn ganz wegzulassen wich ohne CSS-Befund vom einzigen Beleg ab, ohne dass die
2768
2762
  * Doku das verlangt. Anders als `caption` ist die Kopfzelle nicht barrierefreiheitsrelevant
@@ -2770,8 +2764,8 @@ interface CdsCompareRow {
2770
2764
  * Ecke ohne eigenen Namen. Deshalb Beiwerk, kein Inhalt — das Beispielwort „Funktion“ steht in
2771
2765
  * der Story, nicht in der Klasse.
2772
2766
  *
2773
- * **Natives `<details>`/`<summary>` bleibt erhalten, kein nachgebautes Disclosure** (Ticket-
2774
- * Vorgabe, analog `cds-faq`): Tastaturbedienung und Toggle-Verhalten kommen vom Browser, das CSS
2767
+ * **Natives `<details>`/`<summary>` bleibt erhalten, kein nachgebautes Disclosure**
2768
+ * (analog `cds-faq`): Tastaturbedienung und Toggle-Verhalten kommen vom Browser, das CSS
2775
2769
  * hängt direkt an `[open]` (`.ep-compare[open] .ep-compare-caret`). `<details class="ep-compare">`
2776
2770
  * sitzt deshalb im TEMPLATE, nicht am Host — derselbe Grund wie bei `cds-table`s
2777
2771
  * `.tbl-wrap`/`.tbl`: ein `<cds-compare>`-Host ist ein unbekanntes Custom Element, kein echtes
@@ -2819,14 +2813,14 @@ type CdsAvatarSize = 'sm' | 'lg' | 'xl';
2819
2813
  * Avatar (`div[cdsAvatar]`) — Wrapper um `.article-avatar` aus css/components.css
2820
2814
  * (css/components.css:1520–1536): der Initialen-/Foto-Kreis im Meta-Strip eines
2821
2815
  * Wissensbeitrags (`.article-meta-author`), in der Author-Card (`-lg`) und im
2822
- * Team-Tile-Grid (`-xl`). Elftes Ticket der Seitenbausteine-Serie.
2816
+ * Team-Tile-Grid (`-xl`).
2823
2817
  *
2824
2818
  * **Attributselektor (ADR-0008), gemessen an der Geschwister-Kette.** Ausgezählt in
2825
2819
  * `docs/index.html`: 8 der 11 Instanzen der Grundgröße sitzen als direkte, adjazente
2826
2820
  * Geschwister in einer von 3 `.article-avatar-stack`-Kacheln (2 Avatare in Zeilen
2827
2821
  * 8343–8344, je 3 in Zeilen 8373–8375 und 8404–8406) — genau dort greift
2828
2822
  * `.article-avatar-stack .article-avatar + .article-avatar`
2829
- * (css/components.css:1540–1541), eine Geschwister-Kette (Kriterium `spec.md` 2b).
2823
+ * (css/components.css:1540–1541), eine Geschwister-Kette.
2830
2824
  * Ein Element-Selektor `cds-avatar`, der `.article-avatar` auf einem INNEREN Element
2831
2825
  * rendert (wie `cds-facts` es mit `<dl>` tut, weil `<dl>` ein Custom Element nicht
2832
2826
  * annehmen kann), würde diese Kette brechen: die beiden `.article-avatar`-Knoten
@@ -2854,7 +2848,7 @@ type CdsAvatarSize = 'sm' | 'lg' | 'xl';
2854
2848
  * eigens erfundene Marker-Klasse; der Attributselektor liefert die Zielscheibe für
2855
2849
  * beide Zwecke aus einer Hand, ohne dass der Konsument zwei Attribute schreiben muss.
2856
2850
  *
2857
- * **Initialen werden aus `name` abgeleitet, kein eigener Input** (Ticket-Vorgabe):
2851
+ * **Initialen werden aus `name` abgeleitet, kein eigener Input:**
2858
2852
  * erstes Zeichen des ersten und des letzten durch Whitespace getrennten Worts, groß
2859
2853
  * — ein einzelnes Wort liefert dessen erste zwei Zeichen. Zwei Inputs für dieselbe
2860
2854
  * Information (Name UND Initialen) könnten auseinanderlaufen, sobald nur eines
@@ -2934,14 +2928,14 @@ interface CdsArticleBreadcrumbItem {
2934
2928
  /**
2935
2929
  * ArticleHeader (`cds-article-header`) — Wrapper um `.article-header` aus
2936
2930
  * css/components.css (css/components.css:1486–1490, 1508–1519): der zentrierte Kopf
2937
- * eines Wissensbeitrags (Breadcrumb, optionale Pill, H1, Lead, Meta-Strip). Elftes
2938
- * Ticket der Seitenbausteine-Serie. Hauptvorlage ist
2931
+ * eines Wissensbeitrags (Breadcrumb, optionale Pill, H1, Lead, Meta-Strip).
2932
+ * Hauptvorlage ist
2939
2933
  * `storybook-angular/src/docs/seitenmuster/wissensbeitrag.mdx`, Abschnitt „Article
2940
- * Header“ — dort steht das für dieses Ticket verbindliche Markup samt Begründung,
2934
+ * Header“ — dort steht das verbindliche Markup samt Begründung,
2941
2935
  * nicht nur das Mockup in `docs/index.html`.
2942
2936
  *
2943
2937
  * **Breadcrumb sitzt im Header — abweichend von der allgemeinen Navigationsregel,
2944
- * bewusst der Ticket-Vorlage folgend.** `docs/index.html:2423` dokumentiert für
2938
+ * bewusst der Hauptvorlage folgend.** `docs/index.html:2423` dokumentiert für
2945
2939
  * Unterseiten allgemein, wörtlich: „Den Breadcrumb nicht in einen zentrierten
2946
2940
  * `.article-header` einbetten, sonst wird er mittig ausgerichtet und bekommt einen
2947
2941
  * abweichenden Abstand zur Nav“ (Tabellenzeile „Nicht“ der Breadcrumb-Doku) — und
@@ -2954,30 +2948,27 @@ interface CdsArticleBreadcrumbItem {
2954
2948
  * den Breadcrumb INNERHALB von `.article-header` zeigen: 5 kleine Referenz-Boxen in
2955
2949
  * der Doku-Sektion selbst (`docs/index.html:7850`, `8304`, `8331`, `8361`, `8392` —
2956
2950
  * ohne Topnav/Hero/Footer, reine Bauteil-Illustrationen) plus das Code-Beispiel in
2957
- * `wissensbeitrag.mdx`. Das Ticket benennt genau diese Doku (nicht die
2958
- * Beispielseiten) als Hauptvorlage. Diese Komponente folgt der Ticket-Vorgabe
2959
- * (Breadcrumb als Input, im Header) und dokumentiert den Widerspruch als eigenen
2960
- * Befund
2961
- * (`.scratch/angular-seitenbausteine/issues/20-breadcrumb-in-oder-vor-article-header.md`).
2951
+ * `wissensbeitrag.mdx`. Diese Komponente folgt bewusst dieser Doku, nicht den
2952
+ * Beispielseiten (Breadcrumb als Input, im Header), und dokumentiert den
2953
+ * Widerspruch als eigenen Befund.
2962
2954
  * Konsumenten, die der allgemeinen Regel folgen wollen (wie die beiden echten
2963
2955
  * Beispielseiten), lassen `breadcrumb` leer und setzen die Leiste selbst davor
2964
2956
  * (siehe Story „Ohne Breadcrumb“).
2965
2957
  *
2966
- * **Letzter Breadcrumb-Eintrag immer ohne Link, mit `aria-current="page"`** — so vom
2967
- * Ticket als Akzeptanzkriterium gefordert. Die beiden Wissensbeitrag-Inline-Beispiele
2958
+ * **Letzter Breadcrumb-Eintrag immer ohne Link, mit `aria-current="page"`.** Die
2959
+ * beiden Wissensbeitrag-Inline-Beispiele
2968
2960
  * (`docs/index.html:7850–7856`, `wissensbeitrag.mdx`) zeigen dafür nur 2 Einträge,
2969
2961
  * BEIDE als `<a>`, ohne `aria-current` — eine zur Kürze vereinfachte Doku-Skizze,
2970
2962
  * kein vollständiges Barrierefreiheits-Beispiel. Das volle, korrekte Muster (Trenner
2971
2963
  * dekorativ, letzter Eintrag `<span aria-current="page">` ohne Link) steht an
2972
2964
  * anderer Stelle exakt so vor (`docs/index.html:2406–2412` allgemeine
2973
- * Breadcrumb-Doku, `docs/index.html:11023–11030` Stellenanzeige) und ist zusätzlich
2974
- * eine explizite Akzeptanzbedingung des Tickets — die Komponente folgt deshalb
2975
- * diesem Muster für den letzten Array-Eintrag, unabhängig von einem dort eventuell
2976
- * gesetzten `href`.
2965
+ * Breadcrumb-Doku, `docs/index.html:11023–11030` Stellenanzeige) — die Komponente
2966
+ * folgt deshalb diesem Muster für den letzten Array-Eintrag, unabhängig von einem
2967
+ * dort eventuell gesetzten `href`.
2977
2968
  *
2978
2969
  * **Keine bereichsgefärbte Breadcrumb-Verlinkung (`.t-{area}`).** Die
2979
2970
  * Inline-Beispiele färben ihren zweiten (dort letzten) Eintrag mit `.t-ki`/`.t-es`/
2980
- * `.t-wo`; das Ticket sieht dafür aber kein API-Feld vor (`{label, href?}`, kein
2971
+ * `.t-wo`; die API sieht dafür aber kein Feld vor (`{label, href?}`, kein
2981
2972
  * `area` pro Eintrag), und eine Zuordnung „Bereichsfarbe auf den vorletzten
2982
2973
  * Eintrag“ wäre geraten, nicht aus der Doku ableitbar — zumal der gefärbte Eintrag
2983
2974
  * dort ein Link ist, kein `aria-current`-Element, also nicht deckungsgleich mit dem
@@ -2995,7 +2986,7 @@ interface CdsArticleBreadcrumbItem {
2995
2986
  * **Pille rendert nur, wenn `area` UND `pill` gesetzt sind — kein erfundener
2996
2987
  * Default.** `PillComponent.area` ist als `CdsArea` mit einem eigenen Default
2997
2988
  * (`'ki'`) typisiert; diese Komponente führt `area` dagegen als `CdsArea | undefined`
2998
- * (keine Konfigurations-Vorgabe laut Ticket-API). Ein erster Entwurf reichte
2989
+ * (kein eigener Default vorgegeben). Ein erster Entwurf reichte
2999
2990
  * `area()` per `as CdsArea`-Cast durch, damit ein `undefined`-Binding
3000
2991
  * `cds-pill`s eigenen Default überschreiben kann — eine Typ-Lüge, um einen Fall
3001
2992
  * abzudecken, der beim Nachzählen gar nicht vorkommt: **alle 9** `.pill`-Vorkommen
@@ -3024,8 +3015,8 @@ interface CdsArticleBreadcrumbItem {
3024
3015
  * (`stoerer.component.ts:formattedDate`, inkl. manuellem Aufbau der
3025
3016
  * `Date`-Komponenten gegen den UTC-Mitternacht-Fallstrick von `new Date(iso)`).
3026
3017
  * Diese Komponente tut das NICHT: `date` liefert nur den maschinenlesbaren
3027
- * `datetime`-Wert, `dateLabel` die sichtbare Schreibweise — vom Ticket ausdrücklich
3028
- * als zwei getrennte Inputs vorgegeben. Begründung der Abweichung: Erstens deckt
3018
+ * `datetime`-Wert, `dateLabel` die sichtbare Schreibweise — bewusst als zwei
3019
+ * getrennte Inputs. Begründung der Abweichung: Erstens deckt
3029
3020
  * sich das mit jeder realen Instanz (6 von 6 `.article-meta-date`-Vorkommen tragen
3030
3021
  * einen redaktionell gesetzten Text wie „13. Mai 2026“, keinen von
3031
3022
  * `Intl.DateTimeFormat` erzeugten) — anders als der Störer, dessen Kacheln NUR ein
@@ -3037,22 +3028,22 @@ interface CdsArticleBreadcrumbItem {
3037
3028
  * ISO-Form, nicht geraten formatiert) — in der Story „Interaktiv“ als Warnfall extra
3038
3029
  * benannt, damit niemand das versehentlich auf eine Produktionsseite bringt.
3039
3030
  *
3040
- * **Meta-Strip nur, wenn es etwas zu zeigen gibt.** `authorName`/`date` sind laut
3041
- * Ticket-API Beiwerk (Default `''`); ausgezählt haben alle 6 realen
3031
+ * **Meta-Strip nur, wenn es etwas zu zeigen gibt.** `authorName`/`date` sind bewusst
3032
+ * Beiwerk (Default `''`); ausgezählt haben alle 6 realen
3042
3033
  * `.article-meta`-Vorkommen sowohl Autor als auch Datum, eine Stellenanzeige
3043
3034
  * (`docs/index.html:11035`) nutzt `.article-header` dagegen KOMPLETT OHNE
3044
3035
  * `.article-meta` (dort ein `<dl>` aus Job-Fakten statt Autor/Datum) — dieser
3045
- * abweichenden Verwendung folgt diese Komponente nicht (sie hat in der Ticket-API
3046
- * keinen Platz), sie belegt aber, dass ein leerer Meta-Strip ein realer Fall ist.
3036
+ * abweichenden Verwendung folgt diese Komponente nicht (dafür ist in der API kein
3037
+ * Feld vorgesehen), sie belegt aber, dass ein leerer Meta-Strip ein realer Fall ist.
3047
3038
  * `.article-meta` (und darin `.article-meta-author`/`.article-meta-sep`) rendern
3048
3039
  * deshalb nur, wenn `authorName()` bzw. `date()` tatsächlich etwas liefern; der
3049
3040
  * Trenner nur, wenn beide Seiten vorhanden sind.
3050
3041
  *
3051
- * **Avatar projiziert über `[cdsAvatar]`, PLUS `cds-avatar-stack`.** Die
3052
- * Ticket-Skizze nennt nur `<ng-content select="[cdsAvatar]">`; ergänzt um den
3042
+ * **Avatar projiziert über `[cdsAvatar]`, PLUS `cds-avatar-stack`.** Der
3043
+ * ursprüngliche Entwurf nennt nur `<ng-content select="[cdsAvatar]">`; ergänzt um den
3053
3044
  * Tag-Selektor `cds-avatar-stack`, weil `AvatarStackComponent` (siehe dort) ein
3054
3045
  * Element-Selektor ist, kein `[cdsAvatar]`-Attribut trägt und sonst nicht in den
3055
- * Meta-Strip projiziert werden könnte — nötig für die vom Ticket geforderte Story
3046
+ * Meta-Strip projiziert werden könnte — nötig für die Story
3056
3047
  * „Mehrere Autor:innen“.
3057
3048
  *
3058
3049
  * **Host als Block.** `.article-header` sitzt am Host und setzt nur
@@ -3100,8 +3091,7 @@ interface CdsArticleTocItem {
3100
3091
  /**
3101
3092
  * ArticleToc (`cds-article-toc`) — Wrapper um `.article-toc*` aus css/components.css
3102
3093
  * (css/components.css:1577–1589): das aufklappbare Inhaltsverzeichnis am Anfang eines
3103
- * Wissensbeitrags. Zwölftes Ticket der Seitenbausteine-Serie („Artikel-Körper“).
3104
- * Ausgezählt: genau 2 reale Vorkommen, beide mit 5 Einträgen und identischem
3094
+ * Wissensbeitrags. Ausgezählt: genau 2 reale Vorkommen, beide mit 5 Einträgen und identischem
3105
3095
  * sichtbarem Text „Inhalt“ plus identischem `aria-label`
3106
3096
  * (`docs/index.html:7948–7960`, Doku-Sektion mit Platzhalter-Hrefs `#gt-article-toc`;
3107
3097
  * `docs/index.html:15049–15061`, reale Beispielseite Wissensbeitrag · KI mit echten
@@ -3118,8 +3108,8 @@ interface CdsArticleTocItem {
3118
3108
  * zielt auf `p`, nicht auf `details` — ein `<cds-article-toc>`-Host zwischen
3119
3109
  * `.article-body` und dem `<details>` bricht deshalb keine Selektorkette.
3120
3110
  *
3121
- * **Natives `<details>`/`<summary>`, kein nachgebautes Disclosure** (Ticket-Vorgabe,
3122
- * Akzeptanzkriterium): Tastaturbedienung (Enter/Space auf `<summary>`) und
3111
+ * **Natives `<details>`/`<summary>`, kein nachgebautes Disclosure:** Tastaturbedienung
3112
+ * (Enter/Space auf `<summary>`) und
3123
3113
  * Toggle-Zustand kommen vollständig vom Browser, das CSS hängt direkt an `[open]`
3124
3114
  * (`.article-toc[open] .article-toc-caret`, css/components.css:1583). `<details
3125
3115
  * class="article-toc">` sitzt deshalb im TEMPLATE, nicht am Host — derselbe Grund
@@ -3132,8 +3122,8 @@ interface CdsArticleTocItem {
3132
3122
  * Form (natives `<details>`, SVG-Caret, `[open]`-Rotation über
3133
3123
  * `transition:transform`), aber nicht die Aufgabe: `cds-compare` trägt eine
3134
3124
  * Vergleichstabelle mit `columns`/`rows`/`toggled`-Output, dieses Bauteil trägt
3135
- * eine reine Link-Liste ohne Output (siehe API-Vorgabe des Tickets, die für dieses
3136
- * Bauteil bewusst keinen `toggled` vorsieht). Zwei gleiche Stellen sind ein
3125
+ * eine reine Link-Liste ohne Output (die API sieht für dieses
3126
+ * Bauteil bewusst keinen `toggled` vor). Zwei gleiche Stellen sind ein
3137
3127
  * Zufall, kein Muster — eine gemeinsame Basisklasse für zwei Vorkommen hätte nur
3138
3128
  * das `<details>`+Caret-Skelett gebündelt und dabei entweder Verhalten
3139
3129
  * vereinheitlicht (ein erzwungener `toggled`-Output ohne Zweck hier) oder so viel
@@ -3167,8 +3157,7 @@ declare class ArticleTocComponent {
3167
3157
  * ArticleCallout (`cds-article-callout`) — Wrapper um `.article-callout*` aus
3168
3158
  * css/components.css (css/components.css:1591–1600): der bereichsgetönte
3169
3159
  * Aside-Block für Praxis-Beispiele und „In der Realität“-Einschübe im Lauftext
3170
- * eines Wissensbeitrags. Zwölftes Ticket der Seitenbausteine-Serie
3171
- * („Artikel-Körper“). Ausgezählt: 5 reale Vorkommen, je eines pro Bereich in der
3160
+ * eines Wissensbeitrags. Ausgezählt: 5 reale Vorkommen, je eines pro Bereich in der
3172
3161
  * Doku-Sektion (`docs/index.html:8086–8115`, co/ki/es/wo) plus eines in der realen
3173
3162
  * Beispielseite Wissensbeitrag · KI (`docs/index.html:15110–15114`).
3174
3163
  *
@@ -3185,8 +3174,8 @@ declare class ArticleTocComponent {
3185
3174
  * `.article-body` und dem `<aside>` bricht deshalb keine Selektorkette.
3186
3175
  *
3187
3176
  * **Projizierte Absätze bleiben direkte Kinder von `.article-callout`, kein
3188
- * `<div>` um `<ng-content>`** (Ticket-Vorgabe: `.article-callout > p` ist ein
3189
- * Kindselektor, css/components.css:1600). `<ng-content>` selbst fügt kein
3177
+ * `<div>` um `<ng-content>`:** `.article-callout > p` ist ein
3178
+ * Kindselektor, css/components.css:1600. `<ng-content>` selbst fügt kein
3190
3179
  * DOM-Element ein — es verschiebt nur die vom Konsumenten geschriebenen
3191
3180
  * `<p>`-Elemente an ihre Stelle direkt im `<aside>`, eine Ebene unter dem
3192
3181
  * `<cds-article-callout>`-Host, aber ohne zusätzlichen Knoten dazwischen. Geprüft
@@ -3213,8 +3202,7 @@ declare class ArticleTocComponent {
3213
3202
  * verloren, wenn kein bereichsspezifischer Override existiert (`co` und „kein
3214
3203
  * `data-area`“ zeigen `--tx-primary` statt `--co-700`). Diese Komponente
3215
3204
  * reproduziert exakt die Klassen und die Struktur des Mockups und zeigt deshalb
3216
- * denselben, vorbestehenden Fehler wie rohes HTML — siehe
3217
- * `.scratch/angular-seitenbausteine/issues/22-css-luecke-callout-eyebrow-spezifitaet.md`.
3205
+ * denselben, vorbestehenden Fehler wie rohes HTML.
3218
3206
  *
3219
3207
  * **`aria-labelledby` auf `<aside>`, sobald `eyebrow` gesetzt ist — Zusatz zum
3220
3208
  * Mockup, keine CSS-Änderung.** `<aside>` hat implizit die Landmark-Rolle
@@ -3222,8 +3210,7 @@ declare class ArticleTocComponent {
3222
3210
  * mehrere gleichnamige Landmarks ohne zugänglichen Namen. Gemessen mit
3223
3211
  * axe-core an rohem Markup ohne Angular (zwei `<aside class="article-callout">`
3224
3212
  * ohne Auszeichnung): `landmark-unique` schlägt fehl, unabhängig von dieser
3225
- * Komponente — das Mockup selbst kennt diese Auszeichnung nicht (siehe
3226
- * `.scratch/angular-seitenbausteine/issues/23-doku-luecke-callout-landmark-label.md`).
3213
+ * Komponente — das Mockup selbst kennt diese Auszeichnung nicht.
3227
3214
  * Die Eyebrow ist bereits ein prägnanter, vom Redakteur gepflegter Kurztext
3228
3215
  * genau für diesen Zweck (z. B. „In der Praxis“) — sie bekommt deshalb eine
3229
3216
  * generierte `id`, auf die `aria-labelledby` zeigt, sobald sie existiert. Ohne
@@ -3252,8 +3239,7 @@ declare class ArticleCalloutComponent {
3252
3239
  * ArticleFigure (`cds-article-figure`) — Wrapper um `.article-figure`/
3253
3240
  * `.article-figcaption` aus css/components.css (css/components.css:1573–1575):
3254
3241
  * das redaktionelle Inline-Bild mit optionaler Bildunterschrift im Lauftext eines
3255
- * Wissensbeitrags. Zwölftes Ticket der Seitenbausteine-Serie („Artikel-Körper“).
3256
- * Ausgezählt: 3 reale Vorkommen — Doku-Demo mit Caption
3242
+ * Wissensbeitrags. Ausgezählt: 3 reale Vorkommen — Doku-Demo mit Caption
3257
3243
  * (`docs/index.html:8028–8031`), reales Body-Bild mit Caption in der Beispielseite
3258
3244
  * Wissensbeitrag · KI (`docs/index.html:15115–15118`, identischer Bild- und
3259
3245
  * Caption-Text wie die Doku-Demo) und ein dritter, captionsloser Sonderfall direkt
@@ -3281,11 +3267,11 @@ declare class ArticleCalloutComponent {
3281
3267
  * identisches Bild wie Vorschaubild für Wiedererkennung“), sitzt außerhalb von
3282
3268
  * `.article-body` und bekommt seine 720-px-Breite über ein
3283
3269
  * Inline-`style="max-width:720px;margin:0 auto"` am Konsumenten, nicht über die
3284
- * Komponente (Randbedingung 6 der Spec: Mockup-Inline-Styles wandern nicht in
3285
- * den Wrapper). Die Ticket-API sieht dafür kein `loading`/`fetchpriority`-Input
3270
+ * Komponente (Mockup-Inline-Styles wandern bewusst nicht in den Wrapper). Die
3271
+ * API sieht dafür kein `loading`/`fetchpriority`-Input
3286
3272
  * vor; dieses Bauteil deckt deshalb den (häufigeren, dokumentierten) In-Body-Fall
3287
3273
  * ab. Für den Lead-Bild-Sonderfall bleibt `<figure class="article-figure">` roh
3288
- * schreibbar oder — sofern die Semantik passt — `cds-hero-image` (Ticket 02) zu
3274
+ * schreibbar oder — sofern die Semantik passt — `cds-hero-image` zu
3289
3275
  * prüfen.
3290
3276
  *
3291
3277
  * **`alt` und `caption` sind bewusst getrennte Pflicht-/Beiwerk-Inputs, keine
@@ -3310,12 +3296,11 @@ declare class ArticleFigureComponent {
3310
3296
  * ArticlePullquote (`cds-article-pullquote`) — Wrapper um `.article-pullquote` aus
3311
3297
  * css/components.css (css/components.css:1608–1612): die typografische
3312
3298
  * Hervorhebung eines Satzes aus dem eigenen Lauftext eines Wissensbeitrags.
3313
- * Zwölftes Ticket der Seitenbausteine-Serie („Artikel-Körper“). Ausgezählt: 2
3314
- * reale Vorkommen, wortgleich, beide `data-area="ki"` — Doku-Demo
3299
+ * Ausgezählt: 2 reale Vorkommen, wortgleich, beide `data-area="ki"` — Doku-Demo
3315
3300
  * (`docs/index.html:8136`) und reale Beispielseite Wissensbeitrag · KI
3316
3301
  * (`docs/index.html:15075`).
3317
3302
  *
3318
- * **Nicht `cds-blockquote` (`BlockquoteComponent`, `.bq`) — Ticket-Vorgabe, im
3303
+ * **Nicht `cds-blockquote` (`BlockquoteComponent`, `.bq`) — im
3319
3304
  * JSDoc beider Bauteile wechselseitig abgegrenzt.** Pull-Quote und Blockquote
3320
3305
  * teilen die typografische Familie (Serif, bereichsgefärbter Linksakzent in
3321
3306
  * `{area}-500`), aber nicht den Zweck, dokumentiert in `wissensbeitrag.mdx`,
@@ -3372,8 +3357,7 @@ declare class ArticlePullquoteComponent {
3372
3357
  /**
3373
3358
  * AuthorCard (`div[cdsAuthorCard]`) — Wrapper um `.author-card` aus css/components.css
3374
3359
  * (css/components.css:1602–1606): der Avatar-plus-Bio-Strip am Ende eines
3375
- * Wissensbeitrags, einzeln oder mehrfach in `cds-author-card-group`. Dreizehntes und
3376
- * letztes Ticket der Seitenbausteine-Serie. Ausgezählt: 17 reale Vorkommen in
3360
+ * Wissensbeitrags, einzeln oder mehrfach in `cds-author-card-group`. Ausgezählt: 17 reale Vorkommen in
3377
3361
  * `docs/index.html` — 4 einzelstehend (2 Doku-Demos `docs/index.html:8193,8207`, 1
3378
3362
  * Artikel-Demo `8424`, 1 reale Beispielseite `15179`) und 13 in fünf Gruppen (siehe
3379
3363
  * `AuthorCardGroupComponent`).
@@ -3421,8 +3405,7 @@ declare class ArticlePullquoteComponent {
3421
3405
  * ausschließlich vom `area`-Input, den der Konsument direkt an das projizierte
3422
3406
  * `[cdsAvatar]` bindet (siehe unten). Ein `area`-Input, der hier nur `data-area` ohne
3423
3407
  * jede CSS-Wirkung setzt, wäre eine erfundene Konfiguration ohne Gegenwert — Befund
3424
- * gemeldet, nicht im Wrapper geflickt (ADR-0001):
3425
- * `.scratch/angular-seitenbausteine/issues/24-css-luecke-author-card-data-area.md`.
3408
+ * gemeldet, nicht im Wrapper geflickt (ADR-0001).
3426
3409
  *
3427
3410
  * **Avatar projiziert über `[cdsAvatar]`, wie bei `cds-article-header`.** Der
3428
3411
  * Konsument setzt Größe (`size="lg"`, css/components.css:1527) und Bereich
@@ -3432,15 +3415,15 @@ declare class ArticlePullquoteComponent {
3432
3415
  *
3433
3416
  * **Eyebrow als `<h3>`, nur wenn gesetzt** (Beiwerk, Default `''`) — deckungsgleich
3434
3417
  * mit allen 4 einzelstehenden realen Vorkommen: 2 tragen `<h3 class="author-card-eyebrow">`
3435
- * (`docs/index.html:8196,8427`, „Über den Autor“/„Über die Autorin“, Ticket-Vorgabe:
3418
+ * (`docs/index.html:8196,8427`, „Über den Autor“/„Über die Autorin“:
3436
3419
  * eine Ebene unter dem `<h2>` des Article-Body), die anderen 2 (Doku-Demos ohne
3437
3420
  * umgebende Artikelstruktur) haben gar keinen. Innerhalb einer Gruppe trägt laut
3438
3421
  * `wissensbeitrag.mdx` („Eyebrow-Konvention“) keine einzelne Karte mehr einen eigenen
3439
3422
  * Eyebrow — die Gruppen-Überschrift ersetzt sie (siehe `AuthorCardGroupComponent`);
3440
3423
  * Konsumenten lassen `eyebrow` dafür einfach leer.
3441
3424
  *
3442
- * **`roleLabel`, NICHT `role` wie im Ticket-Text — gemessene Abweichung, kein
3443
- * Freihand-Entscheid.** Ein erster Entwurf folgte der Ticket-API wörtlich
3425
+ * **`roleLabel`, NICHT `role` wie in einem ersten Entwurf — gemessene Abweichung, kein
3426
+ * Freihand-Entscheid.** Der erste Entwurf setzte `role` wörtlich um
3444
3427
  * (`role`-Input, mit `role="…"` als schlichtem Attribut in den Stories gesetzt, wie
3445
3428
  * `name`/`bio`/`eyebrow`). Storybooks eingebauter a11y-Check (`aria-roles`) schlug
3446
3429
  * darauf für JEDE Story mit echtem Rollentext fehl: `role` ist ein globales
@@ -3454,7 +3437,7 @@ declare class ArticlePullquoteComponent {
3454
3437
  * (`grep -rn "readonly role" angular-lib/projects/design-system-angular/src/lib/`
3455
3438
  * zeigt nur diese drei). Diese Komponente folgt demselben, bereits etablierten
3456
3439
  * Muster statt die Kollision ein viertes Mal zu wiederholen — CSS-Klasse bleibt
3457
- * unverändert `.author-card-role`, nur der Input-Name weicht vom Ticket-Text ab.
3440
+ * unverändert `.author-card-role`, nur der Input-Name weicht vom ursprünglichen Entwurf ab.
3458
3441
  */
3459
3442
  declare class AuthorCardComponent {
3460
3443
  /** Name (`.author-card-name`). */
@@ -3477,8 +3460,7 @@ declare class AuthorCardComponent {
3477
3460
  * AuthorCardGroup (`cds-author-card-group`) — Wrapper um `.author-card-group` aus
3478
3461
  * css/components.css (css/components.css:1547–1563): bündelt mehrere `[cdsAuthorCard]`
3479
3462
  * am Ende eines Wissensbeitrags, gestapelt (Default) oder als zweispaltiges Raster
3480
- * (`is-grid`, css/components.css:1555). Dreizehntes und letztes Ticket der
3481
- * Seitenbausteine-Serie. Ausgezählt: 5 reale Gruppen — 2 gestapelt in der
3463
+ * (`is-grid`, css/components.css:1555). Ausgezählt: 5 reale Gruppen — 2 gestapelt in der
3482
3464
  * Artikel-Demo (`docs/index.html:8440,8465`, je 2 bzw. 3 Karten), 2 `is-grid`
3483
3465
  * (Doku-Demo `9112`, reale Beispielseite Scrum-Training `13811`, je 4 Karten) und 0
3484
3466
  * `is-grid`-Vorkommen im Wissensbeitrag selbst — `wissensbeitrag.mdx` verweist für