Hermeneus Master-Style-Guide
Version 1.0 | Erstellt: 2025-11-14
Ein umfassender Design-System-Leitfaden für Frontend-Entwickler und Designer. Dieser Guide dient als zentrale "Single Source of Truth" für alle Design-Entscheidungen in der Hermeneus-App.
1. Einleitung und Design-Prinzipien
1.1 Überblick
Hermeneus ist eine webbasierte Lernplattform für lateinische Sprache und Textanalyse. Das Design-System folgt modernen Webstandards und legt besonderen Wert auf:
- Klarheit: Klare, lesbare Typografie und ausreichend Whitespace
- Konsistenz: Einheitliche Patterns und wiederverwendbare Komponenten
- Zugänglichkeit: WCAG AA-konforme Kontraste und barrierefreie Interaktionen
- Modularität: Komponenten-basierte Architektur mit Vue 3 und Tailwind CSS
- Bildungsfokus: Spezielle Formatierung für lateinische Texte und akademische Inhalte
1.2 Tech-Stack
- CSS-Framework: Tailwind CSS 3.4
- UI-Bibliothek: PrimeVue (angepasst)
- Frontend: Vue 3 (Options API)
- Schriftarten: Merriweather (Serif), Merriweather Sans (Sans-Serif)
1.3 Design-Philosophie
Das Hermeneus-Design folgt einem Tailwind-First-Ansatz: Alle Styles werden primär über Tailwind-Utility-Klassen definiert. Benutzerdefinierte CSS-Klassen werden nur verwendet, wenn Tailwind-Utilities nicht ausreichen.
2. Farbsystem
2.1 Hauptfarben
Primary (Dark Jungle Green)
Hauptfarbe der Anwendung für primäre Aktionen, aktive Zustände und Navigationselemente.
- DEFAULT:
#191B28(primary) - Abstufungen:
- 100: Sehr hell (Hintergründe)
- 200-400: Hell (Hover-Zustände, Sekundär-UI)
- 500-600: Mittel (Standard-Aktionen)
- 700-900: Dunkel (Text, Navigation, aktive Elemente)
Verwendung: Primäre Buttons, Navigation (aktiv), Links, Fokus-Indikatoren
Secondary (Metallic Red)
Akzentfarbe für sekundäre Aktionen und Hervorhebungen.
- DEFAULT:
#B22E2F(secondary-600) - Abstufungen:
- 50-100: Sehr hell (Hinweis-Boxen, Hintergründe)
- 300-400: Hell (Hover-Effekte)
- 500-700: Mittel bis dunkel (Buttons, Badges)
- 800-900: Sehr dunkel (Text auf hellen Hintergründen)
Verwendung: Sekundäre Buttons, Badges, Kategorien-Marker
Tertiary (Ateneo Blue)
Tertiärfarbe für spezielle UI-Elemente und Kategorien.
- DEFAULT:
#004563(tertiary) - Abstufungen:
- 100-300: Hell (Sammlungen, Tags)
- 400-600: Mittel (Interaktive Elemente)
- 700-900: Dunkel (Text, Kontraste)
Verwendung: Sammlungen, spezielle Kategorien, alternative Buttons
2.2 Status-Farben
Success (Grün)
- DEFAULT:
#5cb85c - light:
#caffc5(Hintergründe) - dark:
#428542(Text, Borders) - contrast: Weiß (Text auf dunklem Hintergrund)
Verwendung: Erfolgsmeldungen, korrekte Antworten, positive Bestätigungen
Danger/Error (Rot)
- DEFAULT:
#d9533b - light:
#f3b9b1(Hintergründe) - dark:
#a63f3c(Text, Borders) - contrast: Weiß (Text auf dunklem Hintergrund)
- Abstufungen 0-950: Für feine Nuancen in Fehlermeldungen
Verwendung: Fehlermeldungen, falsche Antworten, Warnungen vor destruktiven Aktionen
Warning (Gelb/Orange)
- DEFAULT:
#f0ad4e - light:
#fff0c4(Hintergründe) - dark:
#bd873c(Text, Borders) - contrast: Schwarz (Text auf hellem Hintergrund)
Sekundäres Warning (Warning2):
- DEFAULT:
#f0744e - dark:
#bd5a3c - light:
#ecbd9e
Verwendung: Warnhinweise, ausstehende Aktionen, Aufmerksamkeits-Marker
Info (Grau/Neutral)
- DEFAULT:
#f0f0f0 - light: Weiß
- dark:
#e0e0e0 - contrast:
#777
Verwendung: Informations-Boxen, neutrale Hinweise, Hilfe-Texte
2.3 Spezialfarben
Grey (Neutral-Skala)
Primäre Grau-Skala für Hintergründe, Borders, deaktivierte Zustände und Text.
- 100:
#f5f5f5(sehr helle Hintergründe) - 200:
#eeeeee(Borders, leichte Trenner) - 300:
#dddddd(Standard-Borders) - 400:
#cccccc(deaktivierte Elemente) - 500:
#aaaaaa(Platzhalter-Text) - 600:
#999999(sekundärer Text) - 700:
#777777(Standard-Text) - 800:
#555555(dunkler Text) - 900:
#333333(primärer Text)
Spezielle UI-Farben
- paper:
#ebe3ce(Papier-Hintergrund für Texte) - paper_light:
#f2eee1 - paper_dark:
#e0d1a6 - background: Weiß (Haupthintergrund)
- background_primary:
#f2f2f6(Alternative Hintergründe)
Fachspezifische Farben
- sammlung:
#72b4cc(Sammlungen/Collections) - sammlung_light:
#d8e9f0 - lektion:
#d9534f(Lektionen) - lektion_light:
#fad9da - satzschritte:
#a135ed(Satzschritte/Sentence Steps) - satzschritte_light:
#c570fa - annotation: Rot-Abstufungen 100-900 (Textannotationen)
- adeo:
#001b9d(Spezielle Lerneinheit)
Kategorie-Farben
- uebung-classic:
#2B7BB5(Klassische Übungen) - uebung-ludus:
#9C27B0(Spiel-Übungen) - uebung-default:
#B22E2F(Standard-Übungen)
2.4 Transparente Farben
- weiss-25: Weiß mit 25% Opazität
- weiss-50: Weiß mit 50% Opazität
- weiss-75: Weiß mit 75% Opazität
Verwendung: Overlay-Effekte, Glasmorphism, Backdrop-Filter
2.5 Farbverwendungsrichtlinien
Hintergründe:
- Haupthintergrund:
bg-whiteoderbg-background - Sekundäre Bereiche:
bg-grey-100oderbg-background_primary - Karten/Cards:
bg-whitemitshadow-sm - Deaktiviert:
bg-grey-100oderbg-grey-200
Borders:
- Subtil:
border-grey-200 - Standard:
border-grey-300 - Stark:
border-grey-400 - Status-abhängig:
border-success,border-danger, etc.
Text:
- Primär:
text-grey-900odertext-primary-900 - Sekundär:
text-grey-700odertext-grey-600 - Deaktiviert:
text-grey-500odertext-grey-400 - Platzhalter:
text-grey-500
3. Typografie
3.1 Schriftarten
Sans-Serif (Standard-UI)
Merriweather Sans wird für die gesamte Benutzeroberfläche verwendet.
- Tailwind-Klasse:
font-sans - Verwendung: Buttons, Labels, Body-Text, Navigation, Formulare
Serif (Lateinische Texte)
Merriweather wird ausschließlich für lateinische Texte und Zitate verwendet.
- Tailwind-Klasse:
font-serif - KRITISCHE REGEL: Lateinische Texte MÜSSEN IMMER
font-serif font-boldhaben - Verwendung: Lateinische Vokabeln, Zitate, Textbeispiele
Monospace (Code)
Menlo, Monaco, Consolas für technische Inhalte.
- Tailwind-Klasse:
font-mono - Verwendung: Code-Snippets, technische Ausgaben
3.2 Typografie-Hierarchie
Überschriften
- h1 (Seitentitel):
text-4xlodertext-5xl,font-bold - h2 (Hauptabschnitte):
text-3xl,font-bold - h3 (Unterabschnitte):
text-xl,font-bold - h4 (Kleinere Abschnitte):
text-lg,font-semibold - h5:
text-base,font-semibold - h6:
text-sm,font-semibold
Body-Text
- Standard:
text-base(16px) - Groß:
text-lg(18px) - Klein:
text-sm(14px) - Sehr klein:
text-xs(12px)
Spezielle Texte
- Labels:
text-sm,font-mediumoderfont-bold - Hinweistexte:
text-smodertext-xs, normale Schriftgewichtung - Platzhalter:
text-sm,text-grey-500 - Links:
text-primary-600,hover:text-primary-700 - Grammatikalische Infos:
italic,text-grey-600
3.3 Lateintext-Formatierung
ABSOLUTE REGEL: Alle lateinischen Texte MÜSSEN mit font-serif font-bold formatiert werden.
Inline-Lateintext:
- Verwendung:
<span class="font-serif font-bold">arma virumque cano</span> - Optional mit Hintergrund:
bg-grey-100 px-2 py-1 rounded
Block-Lateintext:
- Zusätzliche Klassen:
text-lgodertext-xl - Zitate:
border-l-4 border-grey-300 pl-4
Vokabeln in Übungen:
- Besonders groß:
text-4xl font-serif font-bold - Mit grammatikalischer Info: Zusätzlich
italic text-grey-500 font-lightfür die Info
3.4 Zeilenhöhe und Abstände
- Überschriften:
leading-tight(1.25) - Body-Text:
leading-normal(1.5) oderleading-relaxed(1.625) - Knappe Texte:
leading-snug(1.375)
Absatz-Abstände:
- Zwischen Absätzen:
mb-4odermb-6 - Zwischen Abschnitten:
mb-8
4. Spacing-System
4.1 Tailwind Spacing-Skala
Hermeneus verwendet die Standard-Tailwind-Spacing-Skala (1 Einheit = 0.25rem = 4px):
- 0: 0px
- 1: 4px (0.25rem)
- 2: 8px (0.5rem)
- 3: 12px (0.75rem)
- 4: 16px (1rem)
- 5: 20px (1.25rem)
- 6: 24px (1.5rem)
- 8: 32px (2rem)
- 10: 40px (2.5rem)
- 12: 48px (3rem)
- 16: 64px (4rem)
4.2 Padding-Richtlinien
Container/Cards:
- Klein:
p-4(16px) - Standard:
p-6(24px) - Groß:
p-8(32px)
Buttons:
- Klein:
px-3 py-1.5 - Standard:
px-4 py-2 - Groß:
px-6 py-3
Form-Elemente:
- Inputs:
p-2oderpx-3 py-2 - Textareas:
p-3oderp-4
Listen und Tabellen:
- Tabellen-Zellen:
p-3oderp-4 - Listen-Items:
px-4 py-3
4.3 Margin-Richtlinien
Abschnitte:
- Zwischen Hauptabschnitten:
my-8odermt-8 mb-8 - Zwischen Unterabschnitten:
my-6odermt-6 mb-6
Elemente:
- Standard-Abstände:
mb-4 - Größere Abstände:
mb-6odermb-8 - Kleinere Abstände:
mb-2odermb-3
Inline-Elemente:
- Icons vor Text:
mr-2odermr-3 - Icons nach Text:
ml-2oderml-3 - Buttons nebeneinander:
mr-2oderspace-x-2
4.4 Gap (Flexbox/Grid)
Flexbox-Layouts:
- Eng:
gap-2(8px) - Standard:
gap-4(16px) - Weit:
gap-6(24px) odergap-8(32px)
Grid-Layouts:
- Standard:
gap-4odergap-6 - Karten-Grid:
gap-6odergap-8
Spezielle Gap-Utilities:
space-y-4: Vertikaler Abstand zwischen Kindernspace-x-3: Horizontaler Abstand zwischen Kindern
5. Responsive Design
5.1 Breakpoint-System
Hermeneus verwendet ein erweitertes Breakpoint-System mit Plus/Minus-Modifikatoren für präzise Kontrolle.
Standard-Breakpoints
- sm: 640px - 767px (Mobile Landscape)
- md: 768px - 1023px (Tablet)
- lg: 1024px - 1365px (Desktop)
- xl: 1366px - 1535px (Large Desktop)
- 2xl: 1536px - 1919px (Extra Large)
- 3xl: ab 1920px (4K und größer)
Plus-Modifikatoren (min-width)
- sm-plus: min 640px (ab Mobile Landscape)
- md-plus: min 768px (ab Tablet)
- lg-plus: min 1024px (ab Desktop)
- xl-plus: min 1366px (ab Large Desktop)
Minus-Modifikatoren (max-width)
- sm-minus: max 767px (bis Mobile Portrait)
- md-minus: max 1023px (bis Tablet)
- lg-minus: max 1365px (bis Desktop)
- xl-minus: max 1365px (bis Desktop)
5.2 Responsive Patterns
Mobile-First-Ansatz: Standard-Styles gelten für Mobile, Erweiterungen für größere Screens.
Typische Verwendung:
- Volle Breite auf Mobile, eingeschränkt auf Desktop:
w-full lg:w-2/3 - Spalten anpassen:
grid-cols-1 md:grid-cols-2 lg:grid-cols-3 - Verstecken auf Mobile:
hidden md:block - Nur auf Mobile zeigen:
block md:hidden
Beispiel-Layout:
- Mobile (sm-minus): Einspaltiges Layout
- Tablet (md): Zweispaltiges Layout
- Desktop (lg-plus): Dreispaltiges Layout mit Sidebar
5.3 Container-Größen
Max-Widths:
- Standard-Container:
max-w-7xl(1280px) - Schmale Container (Formulare):
max-w-2xl(672px) - Breite Container (Tabellen):
max-w-full - Benutzerdefiniert:
max-w-1/3(33%)
Responsive Container:
- Zentriert:
mx-auto - Mit Padding:
px-4 md:px-6 lg:px-8
6. Layout-Patterns
6.1 Haupt-Layout-Typen
Dashboard-Layout
- Grid-basiert mit Karten
- Responsive Grid:
grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 - Karten:
bg-white rounded-lg shadow-sm border border-grey-200 p-6
Formular-Layout
- Zentrierter Container:
max-w-2xl mx-auto - Vertikale Anordnung:
flex flex-col space-y-6 - Sections mit Borders:
border-b border-grey-200 pb-6 mb-6
Listen/Tabellen-Layout
- Volle Breite:
w-full - Filter oben:
flex flex-row justify-between items-center mb-6 - Tabelle mit Scrolling:
overflow-x-auto
Detail-Seiten-Layout
- Zwei-Spalten:
flex flex-row gap-8 - Haupt-Content:
w-2/3 - Sidebar:
w-1/3 - Responsive: Auf Mobile einspaltiges Layout
6.2 Flexbox-Patterns
Container:
- Vertikal:
flex flex-col - Horizontal:
flex flex-row - Zentriert:
flex items-center justify-center
Alignment:
- Items vertikal zentriert:
items-center - Items oben:
items-start - Items unten:
items-end
Justification:
- Space between:
justify-between(Elemente an beiden Enden) - Zentriert:
justify-center - Start:
justify-start - Ende:
justify-end
Wrapping:
- Umbrechen erlauben:
flex-wrap - Kein Umbrechen:
flex-nowrap
Growth:
- Füllen:
flex-1oderflex-grow - Nicht schrumpfen:
flex-shrink-0
6.3 Grid-Patterns
Spalten-Definitionen:
- Zwei Spalten:
grid grid-cols-2 - Drei Spalten:
grid grid-cols-3 - Vier Spalten:
grid grid-cols-4 - Auto-fit:
grid grid-cols-[repeat(auto-fit,minmax(300px,1fr))]
Responsive Grids:
grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4
Gap:
- Standard:
gap-4odergap-6 - Unterschiedlich:
gap-x-6 gap-y-4
6.4 Container-Patterns
Standard-Card:
- Klassen:
bg-white rounded-lg shadow-sm border border-grey-200 p-6 - Hover-Effekt:
hover:shadow-md transition-shadow
Elevated Card:
- Klassen:
bg-white rounded-lg shadow-md p-6 - Ohne Border, stärkerer Schatten
Flat Card:
- Klassen:
bg-grey-50 rounded-lg p-6 - Kein Schatten, subtiler Hintergrund
Content-Wrapper:
- Klassen:
w-full p-4 - Mit Max-Width:
max-w-7xl mx-auto px-4
7. Komponenten-Übersicht
7.1 Buttons
Standard-Button:
- Primär: Dunkler Hintergrund, weißer Text, Primary-Farbe
- Sekundär: Heller Hintergrund, dunkler Text, Secondary-Farbe
- Größen: Small, Standard, Large
- Icons: Optional vor oder nach dem Text
Status-Buttons:
- Success: Grüner Hintergrund
- Danger: Roter Hintergrund
- Warning: Gelber/oranger Hintergrund
Varianten:
- Outlined: Transparenter Hintergrund, farbiger Border
- Text: Kein Hintergrund, nur Text mit Hover-Effekt
- Icon-Button: Nur Icon, meist rund oder quadratisch
Zustände:
- Hover: Dunklere Schattierung
- Focus: Ring-Effekt in Primary-Farbe
- Disabled: Reduzierte Opazität, Cursor nicht erlaubt
- Active: Leicht herunterskaliert
7.2 Form-Elemente
Input-Felder
- Standard: Heller Hintergrund, grauer Border
- Focus: Primary-Border, optionaler Ring
- Error: Danger-Border, roter Text unterhalb
- Success: Success-Border
- Disabled: Grauer Hintergrund, reduzierte Opazität
Labels
- Position: Oberhalb des Inputs
- Schriftgröße: Klein bis mittel
- Schriftgewicht: Medium oder Bold
- Pflichtfelder: Stern oder "(erforderlich)"
- Beschreibungen: Kleinerer, leichterer Text unter dem Label
Textareas
- Auto-Resize: Wächst mit Inhalt
- Min-Height: Festgelegt für initiale Darstellung
- Ansonsten wie Input-Felder
Selects/Dropdowns
- PrimeVue Select bevorzugt
- Mit Suchfunktion bei vielen Optionen
- Multi-Select mit Chips/Tags
Checkboxen und Radio-Buttons
- PrimeVue-Komponenten bevorzugt
- Mit Label rechts oder unterhalb
- Gruppierung mit Space zwischen Items
Toggle-Switches
- Für Ja/Nein-Entscheidungen
- Farbwechsel bei Aktivierung
Slider
- Für Wertebereiche
- Mit Label und aktuellem Wert
Rating
- Sterne-Rating für Bewertungen
- Read-only oder interaktiv
7.3 Navigation
Haupt-Navigation
- Dunkler Hintergrund (Primary-800 oder Primary-900)
- Weiße oder helle Text-Farbe
- Aktive Items: Primary-600 Hintergrund oder Border-Indicator
- Hover: Leicht aufgehellt
Breadcrumbs
- Klein, sekundärer Text
- Trennzeichen: Pfeil oder Slash
- Letztes Element: Nicht klickbar, fett
Tabs
- Border-Bottom-Style bevorzugt
- Aktive Tab: Farbiger Border unten, fetter Text
- Hover: Hintergrund leicht aufgehellt
Sidebar-Navigation
- Heller Hintergrund (Grey-50)
- Border rechts (bei linker Sidebar)
- Aktive Items: Primary-50 Hintergrund, Border links
- Kollapsierbare Abschnitte
7.4 Daten-Darstellung
Tabellen
- Header: Grey-100 Hintergrund, fetter Text
- Zeilen: Abwechselnd oder mit Border zwischen
- Hover: Grey-50 Hintergrund
- Sortierbar: Icon im Header
- Paginierung: Unten zentriert
Listen
- Items mit Border zwischen
- Hover: Heller Hintergrund
- Selektiert: Primary-50 Hintergrund, farbiger Border links
- Icons oder Avatare: Links am Item
Cards/Kacheln
- Für Dashboard-Elemente
- Mit Header, Body, optional Footer
- Hover-Effekt: Schatten verstärken
- Click-Area: Ganze Card oder spezifischer Button
7.5 Overlays
Dialogs/Modals
- Zentriert auf Seite
- Dunkler Backdrop (Overlay)
- Weiße Card mit Schatten
- Header mit Titel und Close-Button
- Footer mit Aktions-Buttons
Popovers
- Kontextuelle Informationen
- Pfeil zeigt auf Trigger-Element
- Leichter Schatten
- Auto-Positioning
Tooltips
- Klein, dunkel
- Weißer Text
- Kurzer Text
- Erscheint bei Hover
7.6 Feedback-Komponenten
Toast-Messages
- Position: Meist oben rechts
- Typen: Success, Error, Warning, Info
- Icon links
- Auto-Dismiss nach Zeit
- Optional mit Close-Button
Alert-Boxen
- Volle Breite oder in Container
- Farbiger Hintergrund (leicht)
- Farbiger Border
- Icon links
- Optional mit Close-Button
Loading-Indikatoren
- Loading-Dots: Mittelgroß, für Sektionen
- Loading-Dual-Ring: Klein, inline
- Loading-Comet: Groß, für ganze Seiten
- Spinner: FontAwesome Spinner mit Spin-Animation
- Skeleton: PrimeVue Skeleton für Platzhalter
- ProgressBar: PrimeVue ProgressBar für Fortschritt
Empty States
- Zentriert
- Großes Icon (oft Grau)
- Beschreibender Text
- Optional Call-to-Action Button
8. PrimeVue-Integration
8.1 Verwendete PrimeVue-Komponenten
Hermeneus nutzt eine Auswahl angepasster PrimeVue-Komponenten. Die vollständige Liste findet sich in der Tailwind-CSS-Konfiguration.
Form-Komponenten:
- InputText, InputNumber, Textarea
- Select, MultiSelect
- DatePicker
- RadioButton, Checkbox
- ToggleSwitch
- Slider, Rating
Button-Komponenten:
- Button, ButtonGroup
Daten-Komponenten:
- Paginator
Overlay-Komponenten:
- Popover, Tooltip
Panel-Komponenten:
- Fieldset, Divider, Stepper
Sonstige:
- Badge, ProgressBar, Skeleton
8.2 PrimeVue-Anpassungen
Hermeneus verwendet ein benutzerdefiniertes Tailwind-Theme für PrimeVue. Alle Farben werden über CSS-Variablen im RGB-Format definiert.
Farbvariablen:
- Primary:
--primary-50bis--primary-950 - Secondary:
--secondary-50bis--secondary-950 - Grey/Surface:
--grey-0bis--grey-900 - Status:
--success,--danger,--warning,--info
Tailwind-Klassen für PrimeVue:
bg-primary-500,text-primary-700, etc.bg-surface-100,border-surface-300, etc.
Workaround-Klassen: Einige fehlende Tailwind-Definitionen wurden als Workaround in der PrimeVue-CSS definiert (z.B. min-w-2 bis min-w-13).
8.3 PrimeVue Best Practices
Bevorzugung:
- PrimeVue-Komponenten gegenüber nativen HTML-Elementen bevorzugen
- Props verwenden statt Custom-CSS
- Tailwind-Utilities über
class-Prop anwenden
Severity-Prop (Buttons):
primary,secondary,success,danger,warning,info
Size-Prop:
small,large(Standard ist Medium)
Icons:
- FontAwesome-Klassen über
icon-Prop:icon="fas fa-check"
9. Icon-System
9.1 FontAwesome (Primäres System)
Hermeneus nutzt FontAwesome als primäre Icon-Bibliothek.
Icon-Stile:
- Solid:
fas fa-{icon-name}(Standard, gefüllt) - Regular:
far fa-{icon-name}(Outline) - Brands:
fab fa-{icon-name}(Marken-Logos)
Häufige Icons:
- Benutzer:
fa-user - Einstellungen:
fa-cog - Suche:
fa-search - Plus:
fa-plus - Check:
fa-check - X/Close:
fa-times - Pfeil rechts:
fa-arrow-right - Info:
fa-info-circle - Warnung:
fa-exclamation-triangle - Error:
fa-times-circle - Success:
fa-check-circle
9.2 Hermeneus Custom Icons
Zusätzlich gibt es benutzerdefinierte Hermeneus-Icons für spezielle Anwendungsfälle.
Verwendung:
- Als Klasse:
hi hi-{icon-name} - Als Komponente:
<hermeneus-icon name="hi-{icon-name}" />
Komponenten-Props:
name: Icon-Name (z.B. "hi-uebung")height: Höhe in Pixel (z.B. "32", "48")color: Farbe (z.B. "hi-color-primary-600")
9.3 Icon-Größen
FontAwesome-Größen (über Tailwind):
- Extra Small:
text-sm - Small:
text-lgodertext-xl - Medium:
text-2xl - Large:
text-3xlodertext-4xl - Extra Large:
text-5xloder größer
Hermeneus-Icon-Größen (über height-Prop):
- Small:
height="24" - Medium:
height="32" - Large:
height="48" - Extra Large:
height="72"
9.4 Icon-Farben
FontAwesome (über Tailwind):
- Klassen:
text-primary-600,text-grey-500, etc. - Kontext-abhängig: Farbklasse auf Icon oder Eltern-Element
Hermeneus-Icons (über color-Prop):
- Format:
hi-color-{colorname}-{shade} - Beispiele:
hi-color-primary-600,hi-color-success-500
9.5 Icon-Spacing
Vor Text:
- Klassen:
mr-2(8px) odermr-3(12px)
Nach Text:
- Klassen:
ml-2oderml-3
Standalone:
- Kein zusätzliches Spacing erforderlich
- Optional Padding für Click-Area:
p-2
10. Animationen und Transitions
10.1 CSS-Transitions
Standard-Transition:
- Klasse:
transition-all duration-200 - Verwendung: Allgemeine Hover-Effekte, Farbwechsel
Schnelle Transition:
- Klasse:
transition-all duration-100 - Verwendung: Sofortiges Feedback, Button-Klicks
Langsame Transition:
- Klasse:
transition-all duration-300oderduration-500 - Verwendung: Sanfte Layout-Änderungen, Akkordions
Spezifische Transitions:
- Farben:
transition-colors - Schatten:
transition-shadow - Transform:
transition-transform - Opazität:
transition-opacity
10.2 Keyframe-Animationen
Spin (Spinner):
- Animation: Rotation 360 Grad in 4 Sekunden, endlos
- Klasse:
animate-spinoder.spinner - Verwendung: Loading-Indikatoren
Fade-In:
- Animation: Opazität 0 zu 1 in 0.5s
- Klasse:
fade-inoderanimate-fade-in - Verwendung: Einblenden von Elementen
Fade-Out:
- Animation: Opazität 1 zu 0 in 0.5s
- Klasse:
fade-outoderanimate-fade-out - Verwendung: Ausblenden von Elementen
Bounce:
- Animation: Kurzes Auf-und-Ab in 0.5s
- Klasse:
.bounce - Verwendung: Erfolgs-Feedback, Aufmerksamkeit erregen
Slide-Down (Vue Transition):
- Name:
slide-down - Animation: Max-Height und Opazität, 0.3s
- Verwendung: Expand/Collapse-Bereiche
10.3 Transform-Effekte
Scale bei Hover:
- Klasse:
hover:scale-105oderhover:scale-102 - Verwendung: Karten, Buttons (subtiles Feedback)
Scale bei Active:
- Klasse:
active:scale-95 - Verwendung: Buttons (Klick-Feedback)
Translate bei Hover:
- Klasse:
hover:-translate-y-1 - Verwendung: Cards (Lift-Effekt)
Rotation:
- Klasse:
hover:rotate-3oderhover:rotate-6 - Verwendung: Icons, spielerische Elemente
10.4 Spezielle Animationen (Vokabelabfrage)
Für Vokabel-Abfrage-Komponenten existieren zusätzliche spezialisierte Animationen (siehe separaten Vokabelabfrage-Style-Guide):
- fadeInUp: Eingangsbewegung von unten
- feedbackSlideIn: Feedback-Einblendung
- successBounce: Erfolgs-Animation mit Rotation
- errorShake: Fehler-Shake-Effekt
11. Interaktive Zustände
11.1 Hover-Zustände
Links:
- Text-Farbe:
hover:text-primary-700(dunklere Schattierung) - Unterstreichen:
hover:underline - Kombination: Beides möglich
Buttons:
- Hintergrund: Dunklere Schattierung (z.B.
hover:bg-primary-700) - Schatten: Verstärken (
hover:shadow-mdoderhover:shadow-lg) - Transform: Leicht vergrößern (
hover:scale-105)
Cards/Kacheln:
- Schatten: Verstärken (
hover:shadow-md) - Border: Farbiger Border (
hover:border-primary-500) - Transform: Leicht anheben (
hover:-translate-y-1)
Listen-Items:
- Hintergrund:
hover:bg-grey-50oderhover:bg-grey-100
Icons:
- Farbe:
hover:text-primary-600(von Grau zu Primary) - Rotation:
hover:rotate-6(spielerisch)
Transition: IMMER transition-all oder spezifische Transition hinzufügen!
11.2 Focus-Zustände
Input-Felder:
- Border:
focus:border-primary-500 - Ring:
focus:ring-2 focus:ring-primary-200oderfocus:ring-primary-500 - Outline:
focus:outline-none(wenn Ring verwendet wird)
Buttons:
- Ring:
focus:ring-2 focus:ring-primary-500 - Offset: Optional
focus:ring-offset-2 - Outline:
focus:outline-none
Links:
- Outline: Standard-Browser-Outline oder
focus:outline-none focus:underline
Accessibility: Focus-Zustände MÜSSEN sichtbar sein für Keyboard-Navigation!
11.3 Active/Selektierte Zustände
Navigation (aktiver Link):
- Hintergrund:
bg-primary-600mittext-white - Border: Farbiger Border (z.B. links:
border-l-4 border-primary-600) - Schrift: Fett (
font-bold)
Listen-Items (selektiert):
- Hintergrund:
bg-primary-50 - Border:
border-l-4 border-primary-500 - Optional Icon oder Check-Mark
Tabs (aktiv):
- Border unten:
border-b-2 border-primary-600 - Text:
text-primary-600 font-semibold
Buttons (beim Klicken):
- Transform:
active:scale-95(kurzes Herunterskalieren)
11.4 Disabled-Zustände
Allgemein:
- Opazität:
opacity-50oderopacity-60 - Cursor:
cursor-not-allowed
Buttons:
- Hintergrund:
bg-grey-400(statt Farbe) - Text:
text-grey-600 - Kein Hover-Effekt
Input-Felder:
- Hintergrund:
bg-grey-100oderbg-grey-200 - Text:
text-grey-500 - Border:
border-grey-300
Links:
- Text:
text-grey-400 - Kein Hover oder Click
Icons:
- Farbe:
text-grey-400odertext-grey-500
12. Feedback-Systeme
12.1 Toast-Messages (IrisMessenger)
Verwendung:
- API:
this.$IrisMessenger.bar() - Position: Standardmäßig oben rechts
Typen:
type: 'success': Grüner Hintergrund, Check-Icontype: 'error': Roter Hintergrund, X-Icontype: 'warning': Gelber Hintergrund, Warning-Icontype: 'info': Blauer Hintergrund, Info-Icon
Properties:
message: Nachrichtentextduration: Anzeigedauer in Millisekunden (z.B. 4000)
Best Practices:
- Kurze, prägnante Nachrichten
- Auto-Dismiss nach 3-5 Sekunden
- Für kurzfristige Bestätigungen und Fehler
12.2 Alert-Boxen
Info-Alert:
- Hintergrund:
bg-info-light - Border:
border border-info - Text:
text-info-contrast - Icon:
fa-info-circle
Success-Alert:
- Hintergrund:
bg-success-light - Border:
border border-success - Text:
text-success-dark - Icon:
fa-check-circle
Warning-Alert:
- Hintergrund:
bg-warning-light - Border:
border border-warning - Text:
text-warning-dark - Icon:
fa-exclamation-triangle
Error-Alert:
- Hintergrund:
bg-danger-light - Border:
border border-danger - Text:
text-danger-dark - Icon:
fa-times-circle
Struktur:
- Container:
rounded p-4 - Icon: Links,
mr-3 - Text: Rechts davon
- Optional Close-Button: Rechts oben
Best Practices:
- Für länger angezeigte Meldungen
- Kontext-abhängig in relevanten Bereichen
- Mit Close-Button für Nutzer-Kontrolle
12.3 Loading-Indikatoren
Globale Komponenten:
<loading-dots>: Mittelgroß, für Sektionen und Cards<loading-dual-ring>: Klein, inline in Buttons oder Text<loading-comet>: Groß, für ganze Seiten oder Overlays
FontAwesome Spinner:
- Klasse:
fas fa-spinner fa-spin - Größe: Über Tailwind (
text-xl,text-2xl, etc.) - Verwendung: Inline-Loading, Button-Icons
PrimeVue Skeleton:
- Komponente:
<Skeleton> - Props:
height,width,borderRadius,animation - Verwendung: Platzhalter für Inhalte während Ladezeit
PrimeVue ProgressBar:
- Komponente:
<ProgressBar> - Props:
value(0-100),showValue,mode(determinate/indeterminate) - Verwendung: Fortschrittsanzeige bei längeren Prozessen
Best Practices:
- Sofortiges Feedback bei Aktion
- Klarer Hinweis auf Lade-Status
- Skeleton für Content-Heavy-Bereiche
12.4 Empty States
Struktur:
- Container: Zentriert,
text-center py-12 - Icon: Groß, Grau (
text-6xl text-grey-400) - Überschrift:
text-xl font-semibold text-grey-700 mb-2 - Beschreibung:
text-grey-600 - Optional: Call-to-Action Button
Verwendung:
- Leere Listen oder Tabellen
- Keine Suchergebnisse
- Fehlende Daten
Best Practices:
- Freundlicher, hilfreicher Ton
- Aktion anbieten (z.B. "Erstellen Sie Ihren ersten Eintrag")
- Passendes Icon zum Kontext
13. Accessibility (Barrierefreiheit)
13.1 Fokus-Management
Keyboard-Navigation:
- Alle interaktiven Elemente MÜSSEN mit Tastatur erreichbar sein
- Tab-Reihenfolge logisch und nachvollziehbar
- Focus-Trap in Modals (Fokus bleibt im Dialog)
Focus-Indikatoren:
- IMMER sichtbare Focus-Indikatoren bereitstellen
- Mindestens Ring oder Border bei Fokus
- Kontrast: Ausreichend zum Hintergrund
TabIndex:
- Native interaktive Elemente haben automatisch TabIndex
- Custom-Komponenten:
tabindex="0"für fokussierbar tabindex="-1"für programmatisches Fokussieren ohne Tab-Erreichbarkeit
13.2 Farb-Kontraste
WCAG AA Standards:
- Normal-Text (unter 18px): Mindestens 4.5:1 Kontrast
- Großer Text (ab 18px oder 14px fett): Mindestens 3:1 Kontrast
- UI-Komponenten: Mindestens 3:1 Kontrast
Hermeneus Kontraste:
- Primary-900 auf Weiß: Ausreichend
- Grey-700 auf Weiß: Ausreichend
- Status-Farben (dark) auf hell: Geprüft und konform
Nicht nur Farbe:
- Informationen NICHT ausschließlich über Farbe vermitteln
- Zusätzlich Icons, Text oder Patterns verwenden
- Beispiel: Fehlermeldungen mit rotem Border UND Icon
13.3 Screen Reader Support
Semantische HTML-Elemente:
<button>für Buttons (nicht<div>)<a>für Links<nav>für Navigation<main>,<header>,<footer>,<article>,<section>
Labels und Alt-Texte:
- Alle Formular-Elemente mit
<label>verknüpfen - Bilder mit aussagekräftigem
alt-Attribut - Icons: Wenn dekorativ,
aria-hidden="true"; wenn funktional,aria-label
ARIA-Attribute:
aria-label: Beschreibung für Screen Readeraria-labelledby: Referenz auf beschreibendes Elementaria-describedby: Zusätzliche Beschreibungaria-live: Für dynamische Inhalte (z.B. Toast-Messages)role: Für nicht-semantische Elemente (z.B.role="button")
Best Practices:
- ARIA sparsam einsetzen (HTML-Semantik bevorzugen)
- Beschreibungen klar und prägnant
- Interaktive Elemente ankündigen (z.B. "Button: Speichern")
13.4 Weitere Accessibility-Richtlinien
Textgröße:
- Benutzer sollten Text bis 200% vergrößern können
- Layout sollte nicht brechen
Animationen:
- Respekt vor
prefers-reduced-motionMedia Query - Reduzierte Animationen für Nutzer mit Motion-Sensitivität
Tastatur-Shortcuts:
- Dokumentiert und logisch
- Keine Konflikte mit Browser-Shortcuts
- Hinweise für Nutzer (z.B. mit
<kbd>Tag)
14. Styling-Konventionen
14.1 Tailwind-First-Ansatz
Grundprinzip: Tailwind-Utility-Klassen sind die primäre Styling-Methode.
Wann Tailwind:
- Alle Standard-Styles (Farben, Spacing, Typography, etc.)
- Layout (Flexbox, Grid)
- Responsive Design
- Interaktive Zustände (Hover, Focus)
Wann Custom-CSS:
- Komplexe Animationen (Keyframes)
- Sehr spezifische Komponenten-Styles
- Wiederholte, komplexe Style-Kombinationen (besser als Komponente)
14.2 CSS-Scoping
Scoped Styles (Vue):
- Verwendet für Komponenten-spezifische Styles
- Vermeidet globale Konflikte
- Nur wenn Tailwind nicht ausreicht
Globale Styles:
- Für app-weite Definitionen
- Basis-Styles, Resets, Fonts
- In
resources/css/app.cssund Unterordnern
Naming:
- BEM-Konvention (Block-Element-Modifier) für Custom-Klassen
- Beispiel:
.card__header--highlighted
14.3 Code-Organisation
Klassen-Gruppierung:
- Layout zuerst (Flexbox, Grid, Positioning)
- Größen (Width, Height, Padding, Margin)
- Typografie (Font, Text)
- Farben (Background, Text, Border)
- Effekte (Shadow, Rounded, Opacity)
- Interaktive Zustände (Hover, Focus)
Beispiel:
flex items-center justify-between
w-full px-4 py-2
text-lg font-bold
bg-primary-600 text-white border border-primary-700
rounded-lg shadow-sm
hover:bg-primary-700 focus:ring-2 focus:ring-primary-500Multi-Line bei vielen Klassen:
- Bei mehr als 5-7 Utility-Klassen: Zeilenumbruch für Lesbarkeit
14.4 Komponenten-Extraktion
Wann Komponente erstellen:
- Wiederholte Style-Kombinationen (mehr als 3x)
- Komplexe Logik + Styling
- Isolierte Funktionalität
Wann Tailwind-Klassen wiederholen:
- Einfache, gelegentliche Wiederholung
- Kontext-spezifisches Styling
Component Props:
- Varianten über Props steuern (z.B.
severity,size) - Tailwind-Klassen über
class-Prop ergänzen
14.5 Spezielle Konventionen
Lateintext:
- IMMER
font-serif font-bold - Keine Ausnahmen
Config-Properties (Backend):
- Prefix
cfg_für Konfigurations-Felder in Datenbank-Tabellen
Module-Aliases:
- Immer
kebab-case(z.B.uebung-bedeutungen-zuordnen)
Komponenten-Dateien:
- Vue-Komponenten:
PascalCasemitComponent.vueEndung - Beispiel:
UebungActivitasComponent.vue
Pinia Stores:
camelCasemitStore.jsSuffix- Beispiel:
uebungActivitasCreateStore.js
15. Best Practices
15.1 Konsistenz
Design Tokens verwenden:
- Niemals Arbitrary Values (z.B.
w-[243px]) - Immer definierte Farben, Spacing, etc. aus dem Design-System
- Ausnahmen nur nach Rücksprache
Patterns wiederholen:
- Etablierte Patterns für ähnliche Komponenten übernehmen
- Nicht jede Komponente neu "erfinden"
- Beispiele in Nachbar-Komponenten suchen
Spacing konsistent halten:
- Gleiche Abstände für gleiche Elemente
- Spacing-Hierarchie beachten (Groß für Sections, Klein für Elemente)
15.2 Performance
Tailwind Purging:
- In Produktion: Nur verwendete Klassen im Build
safelistfür dynamisch generierte Klassen
Lazy Loading:
- Schwere Komponenten (z.B. Charts, große Listen) lazy laden
- Vue's
defineAsyncComponentverwenden
Asset-Optimierung:
- Bilder komprimiert und in modernen Formaten (WebP)
- Icons als SVG oder Icon-Fonts (statt PNG)
- Fonts: Nur benötigte Weights und Subsets laden
CSS-Performance:
- Scoped Styles sparsam einsetzen
- Vermeiden von tiefen Selektoren
- Tailwind JIT-Modus für schnellere Builds
15.3 Wartbarkeit
Dokumentation:
- Komplexe Komponenten dokumentieren
- Props und Events beschreiben
- Verwendungsbeispiele bereitstellen
Kommentare:
- Warum, nicht Was (Code zeigt das Was)
- Magic Numbers erklären
- Workarounds kennzeichnen
Refactoring:
- Wiederholten Code in Komponenten extrahieren
- Große Komponenten in kleinere aufteilen
- Regelmäßig Code-Reviews
15.4 Entwicklungs-Workflow
Pattern-Recherche:
- Vor neuer Implementierung: Nachbar-Dateien prüfen
- Bestehende Patterns wiederverwenden
- Bei Unklarheiten: Team fragen
Testing:
- Visuelles Testing in verschiedenen Viewports
- Accessibility-Testing (Keyboard, Screen Reader)
- Cross-Browser-Testing
Design-System-Updates:
- Neue Patterns dokumentieren
- Bei Änderungen: Bestehende Nutzungen prüfen
- Style-Guide aktuell halten
15.5 Häufige Fehler vermeiden
Inline-Styles vermeiden:
- Kein
style-Attribut in Templates - Tailwind oder Scoped CSS verwenden
!important vermeiden:
- Nur in absoluten Ausnahmefällen
- Meist Zeichen für schlechte Struktur
Zu viele Custom-Klassen:
- Tailwind bevorzugen
- Custom-Klassen nur wenn nötig
Inkonsistente Spacing:
- Nicht wild mischen (z.B.
p-3undp-5nebeneinander) - System einhalten
Fehlende Responsiveness:
- Immer Mobile-First denken
- Breakpoints testen
Accessibility ignorieren:
- Von Anfang an mitdenken
- Nicht "später hinzufügen"
16. Schlusswort
Dieser Master-Style-Guide ist ein lebendiges Dokument und sollte regelmäßig aktualisiert werden, wenn neue Patterns etabliert oder bestehende verfeinert werden. Bei Fragen oder Unklarheiten konsultiere bestehende Komponenten oder sprich mit dem Team.
Wichtigste Prinzipien:
- Tailwind-First
- Konsistenz über alles
- Accessibility von Anfang an
- Lateintext immer Serif + Bold
- PrimeVue bevorzugen
Weitere Ressourcen:
- Hermeneus Application Style Guide (detaillierte Komponenten-Beispiele)
- Style-Guide für Vokabelabfrage-Komponenten (spezialisiert)
- Coding-Style Guide (Backend-Konventionen)
- Tailwind CSS Dokumentation
- PrimeVue Dokumentation
Versionierung:
- v1.0: Initial Release (2025-11-14)
Kontakt: Bei Fragen zum Design-System wende dich an das Frontend-Team.