Hero billboard erweitern statt eigenständige hero-keyvisual SDC: Slot-Komposition für die Brand-Keyvisual-Auslage
hero-billboard wird um overlay: gradient-left-blue und bottom_fade erweitert; das Figma-Keyvisual entsteht durch Slot-Komposition, nicht durch eine neue SDC.
Kontext
Das Figma-Design-System der SOLCOM-Site (figma.com/design/CHHDfbpX8Ys2LBiGs5HVK0, Node 670:13546 „Keyvisual") definiert den Brand-Hero: Vollbild-Background-Image, linearer Gradient-Overlay (--brand-bg-blue von links solid bis 25 %, danach Verlauf zu transparent), optionaler Bottom-Fade (transparent → --brand-bg-blue, ca. 94 px hoch), strukturierter Content-Block (Subheadline in Caps mit Montserrat ExtraBold 39 px, H1 mit ScalaSansLF Regular 59 px, optionaler Body, Primary-CTA als Lime-Pille mit Pfeil, optionale Secondary-CTA als Lime-Text-Link mit Pfeil).
Bestehend: drei Hero-SDCs in components/:
hero-billboard/— Vollbild-Background-Image,overlay_opacity(5-Wert solidbg-black/X-Enum),flex_position,height,object_position,overlap_navbar, plus Slothero_slot. Strukturidentischer Match zum Keyvisual-Layout, aber Overlay-Mechanik passt nicht (solid statt Gradient) und kein Bottom-Fade.hero-side-by-side/— Bild + Content nebeneinander, slot-driven.hero-blog/— strukturierte Props, nicht slot-driven.
Buttons sind in ADR-0004 etabliert. Page-BG ist nach ADR-0003 --brand-bg-blue. Auslöser: Die Startseite canvas_page Entity 7 sollte das Figma-Keyvisual rendern — Bild war bereits hinterlegt, Content-Komposition vorhanden, nur die Brand-Mechanik fehlte.
Entscheidung
hero-billboard wird erweitert; kein eigenständiges hero-keyvisual. Konkret:
overlay_opacity(Enum0%|20%|40%|60%|75%) wird ersatzlos entfernt und durchoverlay(Enumnone | gradient-left-blue, defaultnone) ersetzt. Replace, kein additiver Pfad. Die fünf solid-Black-Werte hatten in der Live-Site genau einen produktiven Aufrufer (60%auf der Homepage) und sind brand-fremd.- Neuer Bool
bottom_fade(defaultfalse), orthogonal zuoverlay. Rendert ein absolutes 96 px hohes Div am unteren Rand mitlinear-gradient(to_bottom, transparent 0%, var(--brand-bg-blue) 100%). Schema-descriptionwarnt: nur sinnvoll, wenn die Folge-Section ebenfalls--brand-bg-blue-Hintergrund hat. - Twig-Fallback: bei
overlay: gradient-left-blue×flex_position: hero-centerwirdoverlaysilent aufnonegesetzt. Ein links-anker-Gradient passt visuell nicht zu zentriertem Content. - Strukturierte Content-Felder (Subheadline, Headline, Body, CTA1, CTA2) werden bewusst nicht modelliert. Site-Builder komponiert im
hero_slot:byte_theme:heading× 2,byte_theme:text,byte_theme:group, darinbyte_theme:buttonundbyte_theme:button-link. - Gradient-Farbe kommt aus
var(--brand-bg-blue), nicht aus Hex-Hardcoding. Twig-CVA:bg-[linear-gradient(to_right,var(--brand-bg-blue)_0%,var(--brand-bg-blue)_25%,transparent_100%)]. - Subheadline-Caps wird redaktionell geschrieben (Content-Editor schreibt Versalien), nicht über einen
uppercase-Bool ambyte_theme:heading. - Schema-
descriptionan der Komponente listet die Figma-Synonyme („Figma: Keyvisual / Hero / Billboard") — Site-Builder, die nach „Keyvisual" suchen, finden so „Hero billboard" im Drupal-SDC-Picker. - Drupal-Daten-Migration in derselben PR:
canvas_pageEntity 7 wird viadrush php:scriptvonoverlay_opacity: "60%"aufoverlay: gradient-left-blue+bottom_fade: trueumgestellt. Canvas-Component-Version-Hash wird überComponentSourceManager::generateComponents('sdc')neu materialisiert, bevor die Entity gespeichert wird.
Rejected alternatives
Expand each rejected option to see the rationale.
Eigenständige hero-keyvisual SDC mit strukturierten Props rejected
Wäre 1:1-Mapping zur Figma-Library. Verworfen, weil: (a) group: Hero hat schon drei Komponenten — ein viertes mit überlappender Mechanik macht den SDC-Picker unklarer; (b) Hero-Mechanik (Background-Image-Layer, Overlay, Container/Position, overlap_navbar-Math) ist nicht-trivial — Code-Duplizierung ohne Mehrwert; (c) Strukturierte Props sperren Variations. Brand-Konsistenz hängt damit redaktionell am Site-Builder, nicht am Schema.
hero-billboard zur God-Komponente machen (strukturierte Props rein, Slot bleibt als Fallback) rejected
Bläht das Schema von 6 Achsen auf 11+, mischt zwei Komponenten-Typen (Layout-Shell + Content-Container) in einer YML, und macht jede zukünftige Hero-Variante zur Schema-Erweiterung an einer einzigen Datei.
uppercase-Bool am byte_theme:heading für Subheadline-Caps rejected
Kontaminiert das zentral genutzte Heading-Schema mit einem Use-Case, der für >95 % der Heading-Aufrufer irrelevant ist. Wenn die Brand-Identität später eine echte „Subheadline"-Style-Klasse erfordert, gehört das in eine eigene Subheadline-SDC.
overlay-Enum mit drei oder mehr Werten rejected
Sinnvoll, falls die Site mehrere Brand-Heros mit unterschiedlichem Overlay-Bedarf hätte. Hat sie aktuell nicht — Figma-Truth ist genau zwei Zustände. Wir folgen der Figma-Truth statt eines hypothetisch-zukünftigen Bedarfs.
bottom_fade an overlay koppeln rejected
Konzeptionell zwei verschiedene Aufgaben — Overlay regelt Text-Lesbarkeit, Bottom-Fade regelt visuellen Übergang zur nächsten Section. Letzteres kann auch ohne Gradient-Overlay sinnvoll sein. Orthogonal halten kostet ein Bool, gewinnt einen Use-Case.
Bottom-Fade als PNG/SVG-Asset rejected
Zusätzlicher HTTP-Roundtrip, schlechtere Skalierung auf variable Hero-Breite, und Token-Drift, falls die Brand-Farbe später wechselt. CSS-Gradient mit Token-Variable ist die token-konsistente Lösung.
Pixel-exaktes Pinning auf Figma-Hex #011C53 ohne Token-Indirektion rejected
Anti-Pattern, weil jede Brand-Color-Anpassung dann den Twig-Code anfassen muss. Token-Variable --brand-bg-blue ist die etablierte Source-of-Truth aus ADR-0003.
Drupal-Daten-Migration in separatem PR rejected
Hätte den Hero in der Live-Site nach Schema-Replace temporär ungültig hinterlassen (overlay_opacity aus dem Schema entfernt, in den Daten noch referenziert → Fehler beim Save). Replace-Schema-Bruch und Daten-Migration sind nicht trennbar.
Consequences
- Brand-Konsistenz wird redaktionell, nicht strukturell gesichert. Wer im SDC-Picker
hero-billboardmitoverlay: gradient-left-blue+bottom_fade: truekombiniert, muss zusätzlich Subheadline, H1, Body, Group und zwei CTAs korrekt zusammenbauen. Das sind sieben Composable-Entscheidungen. Brand-Drift über Zeit ist plausibel — falls der erste Drift-Vorfall passiert, ist das das Signal, doch einehero-keyvisualSDC zu bauen. - Inkonsistenz zur ADR-0004-Linie ist explizit. ADR-0004 hat für Buttons den entgegengesetzten Pfad gewählt (vier dedizierte SDCs statt Composition). Wir treten diese Linie für Heros bewusst nicht weiter. Wer in 6 Monaten die Heros refaktoriert, sollte ADR-0004 und diese ADR gemeinsam lesen.
overlay_opacity-Replace ist ein Breaking-Change. Layout-Builder-Konfigurationen oder Canvas-Component-Instanzen außerhalb der Homepage, dieoverlay_opacityreferenzieren, brechen beim ersten Re-Save. Diese PR migriert nur Entity 7. Falls weiterehero-billboard-Instanzen existieren, müssen sie analog migriert werden.- Canvas materialisiert das SDC-Schema als eigene Config-Entity. Schema-Änderungen am
*.component.ymlsind erst nachComponentSourceManager::generateComponents('sdc')wirksam —drush cache:rebuildallein reicht nicht. Analoge Mechanik wie in ADR-0002. - Slot-Content erbt Schrift-Farbe vom Body (
text-inherit→--foreground=--brand-white).byte_theme:headingmittext_color: defaultgibt weiße Schrift — korrekt für die Brand-Hero-Auslage.text_color: invertedwürde falsch rendern: die Heading-CVA mapptinvertedauftext-background, und--backgroundist--brand-bg-blue— der Heading-Text wäre unsichtbar (Dark-Blue-Text auf Dark-Blue-Background). - Twig-Fallback
gradient-left-blue×hero-center→noneist silent. Ein Site-Builder, der diese Kombination konfiguriert, sieht kein Overlay und keine Warnung. Schema-descriptions referenzieren die Regel. - Bottom-Fade-Color ist hartcodiert auf
--brand-bg-blue. Wer das Hero auf einer Page nutzt, bei der die Folge-Section eine andere Hintergrundfarbe hat, bekommt einen sichtbaren Brand-Blue-Streifen. Schema-descriptionambottom_fade-Prop dokumentiert das. - Subheadline-Caps via Content hat a11y-Implikationen. Screenreader sprechen je nach Engine versalisierte Wörter teils Buchstaben-für-Buchstabe.
text-transform: uppercasewürde das umgehen. Wer in 6 Monaten eine echte Brand-Subheadline-Style-Klasse einführt, sollte parallel eine Migration des Content auf mixed-case machen. - Subheadline-Locale. Deutsche Caps-Konvention (Umlaute → AE/OE/UE oder bleiben?) ist beim Content-Ansatz Sache der Redaktion und nicht im Code geregelt.
button-linkals Sekundär-CTA-Wechsel. Der ursprüngliche Sekundär-Button (sdc.byte_theme.button) wurde durchsdc.byte_theme.button-linkersetzt. Dieses Pattern (Component-Wechsel statt Variant-Schalter) ist die Konsequenz aus der ADR-0004-Button-System-Linie.- Cherry-Pick-Reibung gegen Upstream-Byte-Theme bleibt minimal. Schema-Erweiterung (
overlay-Enum-Replace,bottom_fade-Bool) ist isoliert in einer Component-Datei und Twig-CVA. Anders als beibutton.twig(ADR-0004) ist hier kein generelles Refactor des Komponenten-Vertrags nötig.