Set object group card min width to 550px

This commit is contained in:
2026-05-21 09:29:27 +02:00
parent 097af6662e
commit ea94e2bd6a
5 changed files with 146 additions and 6 deletions
+136
View File
@@ -0,0 +1,136 @@
# Integrationsstrategie Styleguide -> WebApp_Aktienberater
Stand: 18. Mai 2026
Scope: Nur Einbindungsstrategie und Migrationsvorgehen fuer CSS. Keine Frontend-Umbauten in diesem Dokument.
## 1. Zielbild
`public/assets/styles.css` bleibt die produktiv eingebundene Datei, wird aber kuenftig deterministisch aus zwei klar getrennten Schichten erzeugt:
1. `styleguide` (upstream, read-only im Projektkontext)
2. `portal` (lokale App-spezifische Regeln)
Es gibt keine weitere manuelle Vollkopie von CSS-Bloecken in die Produktionsdatei.
## 2. Aktueller Ist-Zustand (belegt)
- Produktivseiten binden `public/assets/styles.css` ein.
- Es gibt keine lokale Styleguide-Kopie mehr im Zielrepo.
- `public/assets/styles.css` enthaelt derzeit einen Mischstand aus Styleguide-Teil plus Legacy-Teil.
Konsequenz: Updates und Debugging sind aktuell fehleranfaellig, weil keine harte Trennung zwischen upstream und lokal besteht.
## 3. Verbindliche Struktur (Soll)
Neue Quellstruktur im Zielrepo:
- `public/assets/styleguide.upstream.css`
Upstream-Quelle (aus dem Styleguide-Repo uebernommen, im Zielrepo read-only behandeln)
- `public/assets/styles.portal.css`
Lokale Portal-Ergaenzungen/Overrides (einzige lokale CSS-Quelle fuer App-spezifische Abweichungen)
- `public/assets/styles.css`
Build-Output fuer Produktivbetrieb (generiert, nicht manuell gepflegt)
## 4. Build-Reihenfolge (verbindlich)
Die Reihenfolge ist fix:
1. `public/assets/styleguide.upstream.css`
2. `public/assets/styles.portal.css`
3. Ausgabe nach `public/assets/styles.css`
Damit gilt:
- Standard liegt im Styleguide.
- Lokale Abweichungen liegen nur im Portal-Layer.
- Keine dritte Ebene mit ad-hoc CSS in Produktivdateien.
## 5. Migrationsphasen
### Phase A: Freeze und Trennung
- Bestehenden Zustand einfrieren (Baseline-Commit).
- Legacy-Abschnitte in `public/assets/styles.css` identifizieren.
- Lokale, weiterhin benoetigte Regeln nach `public/assets/styles.portal.css` verschieben.
### Phase B: Build-Einfuehrung
- Build-Skript einfuehren, das die zwei Quellen in fixer Reihenfolge zusammenfuehrt.
- `public/assets/styles.css` nur noch als Build-Output behandeln.
### Phase C: Bereinigung
- Doppelte `:root`-Definitionen und ueberschneidende Token schrittweise entfernen.
- Jede entfernte Legacy-Regel gegen produktive Screens verifizieren.
### Phase D: Regelbetrieb
- Neue UI-Änderungen nur noch in:
- Styleguide-Repo (globale Patterns/Tokens) oder
- `styles.portal.css` (projektlokale Spezifika)
## 5a. Verbindliche Migrationsreihenfolge
Die Ablösung erfolgt in fester Reihenfolge:
1. Login
2. Hauptliste
3. Detail
4. Admin
Pro Schritt gilt:
- Legacy-Regeln nur fuer den jeweiligen Bereich ablösen.
- Smoke-Test direkt nach jeder Ablösung.
- Erst nach bestandenem Test den naechsten Bereich migrieren.
## 5b. Verbindliche Exit-Kriterien (Legacy entfernt)
Die Migration ist erst abgeschlossen, wenn alle Punkte erfuellt sind:
1. `public/assets/styles.css` ist reiner Build-Output aus:
- `public/assets/styleguide.upstream.css`
- `public/assets/styles.portal.css`
2. In `public/assets/styles.css` existiert kein Legacy-Blockmarker mehr:
- `LEGACY STYLES`
- `To be migrated step by step to styleguide system`
3. Keine manuellen Produktivregeln mehr direkt in `public/assets/styles.css`.
4. Alle weiterhin benoetigten lokalen Abweichungen liegen ausschliesslich in `public/assets/styles.portal.css`.
5. Doppelte oder konkurrierende `:root`-Definitionen aus Legacy wurden entfernt.
## 6. Update-Prozess bei Styleguide-Änderungen
Ja, es braucht regulaere Updates im Zielrepo, sobald der Styleguide geaendert wurde.
Minimalprozess:
1. Neuen Styleguide-Stand nach `public/assets/styleguide.upstream.css` uebernehmen.
2. `public/assets/styles.css` neu bauen.
3. Kurztest der betroffenen Seiten (mindestens: Login, Hauptliste, Detail, Admin).
4. Falls Konflikte auftreten: nur `styles.portal.css` anpassen, nicht upstream patchen.
## 7. Guardrails
- Keine manuellen Hotfixes direkt in `public/assets/styles.css`.
- Keine Vermischung von Upstream-Regeln und Portalregeln in derselben Quelldatei.
- Keine erneute Vollkopie alter Legacy-Bloecke.
- Jede Portal-Abweichung braucht kurze Begruendung im Commit.
## 7a. Verbindliche Abnahme-Checkliste je Migrationsschritt
Vor dem Abschluss eines jeden Schritts:
1. Seite rendert ohne visuelle Regressionen in den betroffenen Hauptbereichen.
2. Interaktive Elemente bleiben funktionsfaehig (Buttons, Tabs, Filter, States).
3. Keine neuen direkten Anpassungen in `public/assets/styles.css`.
4. Diff zeigt nur:
- Upstream-Update (`styleguide.upstream.css`) und/oder
- lokale Portal-Regeln (`styles.portal.css`) und Build-Output.
5. Commit-Text dokumentiert kurz, welcher Legacy-Abschnitt abgeloest wurde.
## 8. Verantwortungsgrenze
- Styleguide-Repo: Design-System-Wahrheit (Tokens, Components, Patterns).
- WebApp_Aktienberater: Integration, lokale Komposition, produktive Einbindung.
Damit bleibt das System updatefaehig und driftarm, ohne laufende Frontend-Umsetzung zu blockieren.
+2
View File
@@ -137,6 +137,8 @@
<tr><td>input-label-width</td><td>9rem</td><td>Desktop-Breite der Label-Spalte bei ein- und mehrzeiligen Eingabefeldern.</td></tr> <tr><td>input-label-width</td><td>9rem</td><td>Desktop-Breite der Label-Spalte bei ein- und mehrzeiligen Eingabefeldern.</td></tr>
<tr><td>input-field-desktop-width</td><td>400px</td><td>Fixe Desktop-Breite von ein- und mehrzeiligen Eingabefeldern in der Input-Component-Preview.</td></tr> <tr><td>input-field-desktop-width</td><td>400px</td><td>Fixe Desktop-Breite von ein- und mehrzeiligen Eingabefeldern in der Input-Component-Preview.</td></tr>
<tr><td>input-field-max-width</td><td>600px</td><td>Maximale Breite von ein- und mehrzeiligen Eingabefeldern (ohne Suchfeld).</td></tr> <tr><td>input-field-max-width</td><td>600px</td><td>Maximale Breite von ein- und mehrzeiligen Eingabefeldern (ohne Suchfeld).</td></tr>
<tr><td>object-group-card-min-width</td><td>550px</td><td>Mindestbreite der Group Card im Pattern Object Group Card.</td></tr>
<tr><td>object-group-card-max-width</td><td>700px</td><td>Maximale Breite der Group Card im Pattern Object Group Card.</td></tr>
<tr><td>search-field-width</td><td>15.3rem</td><td>Fixe Breite des Suchfeld-Inputs inklusive Clear-Button-Bereich.</td></tr> <tr><td>search-field-width</td><td>15.3rem</td><td>Fixe Breite des Suchfeld-Inputs inklusive Clear-Button-Bereich.</td></tr>
<tr><td>layer-pulldown-panel</td><td>40</td><td>Layer-Stufe für geöffnete Pulldown-Ausklappfelder, damit sie über anderen Inhalten liegen.</td></tr> <tr><td>layer-pulldown-panel</td><td>40</td><td>Layer-Stufe für geöffnete Pulldown-Ausklappfelder, damit sie über anderen Inhalten liegen.</td></tr>
<tr><td>multiselect-pulldown-panel-desktop-width</td><td>500px</td><td>Desktop-Breite des geöffneten Multiselektions-Pulldown-Panels im gleichnamigen Pattern.</td></tr> <tr><td>multiselect-pulldown-panel-desktop-width</td><td>500px</td><td>Desktop-Breite des geöffneten Multiselektions-Pulldown-Panels im gleichnamigen Pattern.</td></tr>
+2 -2
View File
@@ -51,8 +51,8 @@
<table class="sg-foundation-table sg-table-label"> <table class="sg-foundation-table sg-table-label">
<thead><tr><th>Semantischer Token</th><th>Verwendeter Foundation-Token</th><th>Beschreibung Verwendungszweck in der Komponente</th></tr></thead> <thead><tr><th>Semantischer Token</th><th>Verwendeter Foundation-Token</th><th>Beschreibung Verwendungszweck in der Komponente</th></tr></thead>
<tbody> <tbody>
<tr><td>layout-object-group-card-min-width</td><td>dimension-object-card-min-width</td><td>Mindestbreite der Karteninstanzen im Pattern Object Group Card.</td></tr> <tr><td>layout-object-group-card-min-width</td><td>dimension-object-group-card-min-width</td><td>Mindestbreite der Karteninstanzen im Pattern Object Group Card.</td></tr>
<tr><td>layout-object-group-card-max-width</td><td>dimension-object-card-max-width</td><td>Maximalbreite der Karteninstanzen im Pattern Object Group Card.</td></tr> <tr><td>layout-object-group-card-max-width</td><td>dimension-object-group-card-max-width</td><td>Maximalbreite der Karteninstanzen im Pattern Object Group Card.</td></tr>
</tbody> </tbody>
</table> </table>
+2 -2
View File
@@ -49,8 +49,8 @@
<h3 class="sg-sub-heading sg-section-h3">Object Group Card</h3> <h3 class="sg-sub-heading sg-section-h3">Object Group Card</h3>
<table class="sg-foundation-table sg-table-label"><thead><tr><th>Semantischer Token</th><th>Verwendeter Foundation-Token</th><th>Beschreibung Verwendungszweck im Pattern</th></tr></thead><tbody> <table class="sg-foundation-table sg-table-label"><thead><tr><th>Semantischer Token</th><th>Verwendeter Foundation-Token</th><th>Beschreibung Verwendungszweck im Pattern</th></tr></thead><tbody>
<tr><td>layout-object-group-card-min-width</td><td>dimension-object-card-min-width</td><td>Mindestbreite der einzelnen Karten im Pattern Object Group Card.</td></tr> <tr><td>layout-object-group-card-min-width</td><td>dimension-object-group-card-min-width</td><td>Mindestbreite der einzelnen Karten im Pattern Object Group Card.</td></tr>
<tr><td>layout-object-group-card-max-width</td><td>dimension-object-card-max-width</td><td>Maximalbreite der einzelnen Karten im Pattern Object Group Card.</td></tr> <tr><td>layout-object-group-card-max-width</td><td>dimension-object-group-card-max-width</td><td>Maximalbreite der einzelnen Karten im Pattern Object Group Card.</td></tr>
</tbody></table> </tbody></table>
<h3 class="sg-sub-heading sg-section-h3">Company Card</h3> <h3 class="sg-sub-heading sg-section-h3">Company Card</h3>
+4 -2
View File
@@ -164,8 +164,8 @@
--layout-object-card-mobile-width: var(--dimension-object-card-mobile-width); --layout-object-card-mobile-width: var(--dimension-object-card-mobile-width);
--layout-object-card-mobile-height: var(--dimension-object-card-mobile-height); --layout-object-card-mobile-height: var(--dimension-object-card-mobile-height);
--layout-object-card-desktop-breakpoint: var(--dimension-object-card-desktop-breakpoint); --layout-object-card-desktop-breakpoint: var(--dimension-object-card-desktop-breakpoint);
--layout-object-group-card-min-width: var(--dimension-object-card-min-width); --layout-object-group-card-min-width: var(--dimension-object-group-card-min-width);
--layout-object-group-card-max-width: var(--dimension-object-card-max-width); --layout-object-group-card-max-width: var(--dimension-object-group-card-max-width);
--surface-object-card-lower-segment: var(--color-white); --surface-object-card-lower-segment: var(--color-white);
--text-company-card-data-negative: var(--chart-value-negative); --text-company-card-data-negative: var(--chart-value-negative);
--text-company-card-moat-neutral: var(--chart-value-neutral); --text-company-card-moat-neutral: var(--chart-value-neutral);
@@ -228,6 +228,8 @@
--dimension-object-card-mobile-width: 100%; --dimension-object-card-mobile-width: 100%;
--dimension-object-card-mobile-height: auto; --dimension-object-card-mobile-height: auto;
--dimension-object-card-desktop-breakpoint: 768px; --dimension-object-card-desktop-breakpoint: 768px;
--dimension-object-group-card-min-width: 550px;
--dimension-object-group-card-max-width: 700px;
--dimension-input-label-width: 9rem; --dimension-input-label-width: 9rem;
--dimension-input-field-desktop-width: 400px; --dimension-input-field-desktop-width: 400px;
--dimension-input-field-max-width: 600px; --dimension-input-field-max-width: 600px;