CABINET und Rotpunkt wirkten neben Februe zu klein. Ursache war nicht die Box,
sondern leerer Rand in den Dateien: CABINET nutzte nur 29 Prozent der Hoehe
seiner Zeichenflaeche, Rotpunkt 70 Prozent. CABINET ist ein 4:1-Schriftzug in
einer fast quadratischen Flaeche – im Seitenkopf blieben davon rund 28 px
sichtbare Hoehe.
Bei beiden SVGs auf die Tuschekante beschnitten (viewBox auf den Inhalt
gesetzt, plus 1 Prozent Luft; die Pfade selbst unveraendert). Beide nutzen ihre
Flaeche jetzt zu 98 Prozent. Im Seitenkopf ist CABINET damit rund zweieinhalb-
mal so gross wie vorher, Rotpunkt gut anderthalbmal und auf derselben Hoehe
wie Februe.
Die Boxgroessen im Frontend bleiben unveraendert – Februe sass bereits richtig,
eine groessere Box haette Februe mitvergroessert.
Ein Test haelt fest, dass unter public/ die beschnittenen Fassungen liegen und
nicht die Zulieferungen.
Tests: 873 gruen (3217 Assertions), Pint sauber.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Zulieferung dev/2026-08-28/markenlogos/ (CABINET und Rotpunkt als SVG, Februe
als PNG). Die Dateien liegen unter public/img/assets/marken/ und haengen als
`logo` an der jeweiligen Marke.
- Kopf der Markenseite: Logo anstelle des Schriftzugs, im <h1>, damit die
Ueberschrift erhalten bleibt – den Text liefert das alt-Attribut. Ohne Logo
erscheint weiterhin der Schriftzug.
- Logo zusaetzlich auf der Startseiten-Kachel, im Block auf /marken und in den
„Weitere Marken“-Kacheln am Seitenfuss.
- Feste Box (Hoehe + Maximalbreite + object-contain) statt fester Hoehe: die
Seitenverhaeltnisse gehen weit auseinander (Februe 2,3:1, Rotpunkt 1,2:1),
mit reiner Hoehenangabe waere Februe doppelt so breit erschienen. Konvention
aus der Sponsoring-Sektion.
- Februe-Logo auf seinen Inhalt beschnitten: im Original waren knapp drei
Viertel der Flaeche leerer Rand, in einer Box haette es winzig gewirkt.
53 KB → 15 KB.
- BrandLogoSeeder traegt die Logos auf bestehenden Installationen nach –
CmsBrandSeeder ueberspringt vorhandene Marken. Setzt nur `logo` und nur bei
leerem Feld, ein im Admin hochgeladenes Logo bleibt stehen.
Tests: 871 gruen (3215 Assertions), Pint sauber, alle Themes gebaut.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Nach dem Build stand der Abschluss hellgrau mit weisser Schrift da.
`.variante-glass-flow section` faerbt jede Sektion in diesem Wrapper hell ein
und ist mit (0,1,1) spezifischer als `.cta-band` mit (0,1,0). Fuer
`.bg-secondary` und `.bg-accent` gibt es dort laengst Ausnahmen – die neue
Klasse brauchte dieselbe. /marken/{slug} haengt in genau diesem Wrapper.
Der Verlauf steht jetzt in --cta-band-gradient und wird von beiden Regeln
benutzt, damit er nicht doppelt gepflegt werden muss. Ein Test haelt die
Ausnahme fest.
Nebenbei dokumentiert: `npm run build:web` baut nur die vier Frontend-Themes,
nicht das Portal. Ohne `npm run build:portal` liefert das Admin-Portal 500 –
in Deployment-Checkliste und Vorschau-Runbook ergaenzt, samt Pruefschleife
ueber alle fuenf Manifeste.
Tests: 863 gruen (3194 Assertions), Pint sauber, alle Themes gebaut.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Die beiden blur-Kreise ueber dem Hellblau wirkten als Flecken – der dunkle
rechts unten am staerksten. Ersetzt durch .cta-band in shared-styles.css: ein
durchgehender Verlauf ueber die volle Breite, von Anthrazit diagonal in das
Dynamic Blue, beides aus den Theme-Variablen.
- Tiefe kommt aus dem Verlauf, nicht aus ueberlagerten Flaechen.
- Zwei Haarlinien als Kontur: eine oben ueber die Breite, eine als Auftakt
ueber der Ueberschrift, beide zu den Seiten auslaufend.
- Buttons filigraner: duennerer Rahmen beim Outline-Button, weicherer Schatten
beim Hauptbutton.
Der Verlauf liegt als CSS-Klasse vor und nicht als Utility-Kette im Blade,
damit er mit den Theme-Variablen arbeitet und ueber alle Themes stimmt.
Tests: 862 gruen (3192 Assertions), Pint sauber, npm run build:b2in gebaut.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Die Klappelemente sprangen auf und zu: x-show gibt dem Element sofort die
volle Hoehe und blendet nur den Inhalt ein. Ersetzt durch eine Animation von
grid-template-rows 0fr → 1fr ueber 500 ms mit cubic-bezier(0.33, 1, 0.68, 1),
die die tatsaechliche Hoehe bewegt – ohne das Alpine-Collapse-Plugin, das in
diesem Projekt nicht registriert ist.
- Der zugeklappte Zustand steht auch statisch im class-Attribut, damit vor dem
Start von Alpine nichts aufgeklappt aufblitzt.
- aria-hidden haengt am Zustand, weil der Inhalt jetzt dauerhaft im DOM steht.
- Hover: die Flaechenaufhellung (hover:bg-muted/30) ist raus, geblieben ist ein
feiner Farbwechsel der Ueberschrift. Im FAQ entfaellt zusaetzlich der
Hintergrundwechsel am Icon-Kreis.
- Der Pfeil dreht in derselben Dauer und Kurve wie das Aufklappen.
Betrifft beide Akkordeons – die Vertiefungen der Markenseiten und das FAQ.
Tests: 861 gruen (3189 Assertions), Pint sauber, npm run build:b2in gebaut.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Setzt die vier Punkte aus dev/2026-08-28/umsetzung-03-09-2026.md um.
1. Markenseiten
- Rotpunkt und Febrü auf die korrigierten Fassungen (*_FINAL.md) gebracht:
bei Rotpunkt sind die beiden Nachhaltigkeitsabschnitte zusammengefuehrt,
bei Febrü behaelt der Blaue-Engel-Satz seinen Produktbezug ohne den
erklaerenden Zusatz.
- CABINET nach demselben Muster neu verfasst: 8 Abschnitte, 3 Vertiefungen,
eigener Abschlussblock und eigene Widget-Beschriftung. Bewusst ohne Zahlen,
Zertifizierungen oder Herstelleraussagen – dafuer gibt es keine Quelle.
Braucht Marcels Freigabe.
- Febrü-Claim korrigiert: „Arbeiten, wo man gerne bleibt.“
2. „BEISPIEL“-Vermerk aus den Bildunterschriften entfernt. Weil die Demobilder
auf Vorschau und Live bereits in der Datenbank stehen, entfernt
BrandGalleryCaptionNormalizerSeeder ihn dort in-place – nur der Text, Bild,
Kategorie und Reihenfolge bleiben unberuehrt.
3. Hinweise zu Visualisierungen neu formuliert (Markengalerie und /referenzen).
Die Trennung bleibt, sie laeuft nur nicht mehr ueber eine Verneinung.
4. Abschluss-CTA der Markenseiten ueberarbeitet: weiche Lichtflaechen statt
Vollton, gesetzter Hauptbutton mit Pfeil, Herstellerseite als gleichwertiger
Outline-Button, Showroom als Fusszeile.
Ein Pruefskript hat jeden veroeffentlichten Satz gegen die abgestimmten
Markdown-Fassungen gehalten: keine Abweichung.
Tests: 859 gruen (3180 Assertions), Pint sauber, npm run build:b2in gebaut.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Umsetzung der beiden finalen Webseitentexte aus dev/2026-08-28/.
Die angekündigte Aufgabenliste umsetzung-03-09-2026.md war leer, Grundlage
sind daher die Umsetzungshinweise in den PDFs selbst.
- Neue Felder in cms_brands: sections, widget_label, cta_title, cta_text.
Einleitung und Leistungskacheln reichten für diese Texte nicht aus.
- Die als Vertiefung gelieferten Blöcke werden aufklappbar dargestellt,
mit aria-expanded und aria-controls. Bewusst x-transition statt
x-collapse, weil das Collapse-Plugin hier nicht registriert ist.
- Kein zweiter CTA-Button: das schwebende Terminanfrage-Widget trägt auf
der Markenseite die Beschriftung der Marke und liest den Kontext aus
der Route, da es im Layout und nicht je Seite eingebunden ist.
- Footer bekommt unten Platz und lange Beschriftungen brechen um, damit
das Widget auf dem Smartphone nichts verdeckt.
- Abschnitte sind im Admin vollständig pflegbar, inklusive Sortierung.
- Interne Quellenhinweise der PDFs sind nicht übernommen; ein Test prüft,
dass sie nicht im Ausgabe-HTML stehen.
- BrandPageTextSeeder fasst nur die Textfelder an, Bilder, Galerie und
Leistungen bleiben unangetastet.
Vor der Veröffentlichung: Herstellerfreigabe einholen und die Aussage zur
erhaltenen Waldfläche nur mit ausdrücklicher Bestätigung verwenden. Beides
steht in der Deployment-Checkliste.
854 Tests grün (3150 Assertions), Pint sauber.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Umsetzung von AP0-AP6 aus dev/2026-08-28/entwicklungsplan.md sowie der
vorab gefundenen Befunde T1 und B1-B13.
Befunde
- CmsContentSeeder überschrieb bei jedem Lauf alle redaktionellen Inhalte;
jetzt Redaktionsschutz plus gezielter Relaunch-Seeder (B1)
- Magazin-CMS war nicht ans Frontend angebunden, Artikel jetzt über Slugs
mit 301 von den alten numerischen URLs (B2)
- Vier veröffentlichte Display-Playlists zeigten auf b2in.test und wären
live nicht ladbar gewesen (B13)
- Info-Tablet speicherte geleerte Öffnungszeiten nicht (T1)
- /service und /portfolio lieferten seit Februar 500 (B12)
Website
- Startseite neu strukturiert und umgetextet, eigene Seite /marken mit
Detailseite je Kernmarke, /netzwerk und Altrouten leiten dorthin
- Galerie je Marke, getrennt nach realisierten Projekten und
Visualisierungen; ohne gesetzte Kategorie gilt ein Bild als Entwurf
- Seite /referenzen, gespeist aus den Markengalerien
- Showroom-Display im 9:16-Rahmen über eine schreibgeschützte Embed-Route
ohne Preview-Token
- Terminanfrage-Widget auf allen Seiten, Markenauswahl aus dem CMS,
WhatsApp per Klick-zum-Chat-Link mit vorbereitetem Text
- FAQ, Über-uns, Kontakt und Magazin inhaltlich auf Interior umgestellt
Sonstiges
- Vorschau-Instanzen liefern noindex und verlinken sich bei unbekanntem
Host auf sich selbst statt auf eine fremde Domain
- Seeder-Zugangsdaten aus dem Code in die Konfiguration (B8)
- Ablauf für die Vorschau: dev/2026-08-28/preview-deployment.md
833 Tests grün (3084 Assertions), Pint sauber.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Mediathek: Video-Vorschaubilder statt Icons (FFmpeg-Thumbnails + Backfill-Command), Kategorie "Sonstiges"
- B2in Media-Picker zeigt alle Medientypen, Typ wird automatisch erkannt; Thumbnail-Preview vor allen Medien-URL-Feldern
- B2in Marke/Footer: Footer ein/aus, Logo+Claim frei positionierbar (Ecken) mit Constraints, separate Anzeige-Schalter
- Angebote-Modul dynamisch: kein Slide-Typ mehr, einheitliches Detail-Layout mit ein-/ausblendbaren Bloecken, Logo/Brand pro Slide, Streichpreis-Option
- Player: leere Module stoppen Endlosschleife, dynamische Layout-Anpassung bei verstecktem Footer/Header
- Fix: Script-Ladereihenfolge (Livewire vor Flux), entfernte stale public/flux/flux.js, Modal-Crash beim Aktualisieren behoben
Co-authored-by: Cursor <cursoragent@cursor.com>