Files

229 lines
9.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# HMS Licht & Ton UI Design Dokumentation
## 1. Projekt-Überblick
**Projekt:** Neue Homepage für HMS Licht & Ton GbR, Veranstaltungstechnik aus Leipheim/Ellzee
**Domain:** hms.media-on.de (nicht öffentlich indexiert noindex, nofollow)
**Technologie:** Nuxt 3 (Vue 3 + Tailwind CSS, SSR/SSG) + FastAPI Backend + Coolify Deployment
## 2. Design-Philosophie
Das Design folgt einer **dunklen, professionellen Ästhetik** orientiert an den Agent Zero WebUI Grautönen. Orange (#EC6925) aus dem HMS-Logo wird **dezent als Akzentfarbe** eingesetzt ausschließlich für Buttons, Badges, kleine Text-Highlights und den Logo-Rahmen. Keine großen Orange-Flächen.
**Tonalität:** Professionell, erfahren, zuverlässig, technisch kompetent nicht werblich oder übertrieben.
## 3. Design Tokens
### 3.1 Farbpalette
#### Agent Zero Dark Theme (Hauptfarben)
| Token | Hex | Verwendung |
|-------|-----|------------|
| `--bg` | `#131313` | Seiten-Hintergrund |
| `--panel` | `#1a1a1a` | Panels, Cards, Header |
| `--surface` | `#212121` | Input-Felder, Surface-Level |
| `--row` | `#272727` | List-Items, Zwischenebenen |
| `--card` | `#2d2d2d` | Card-Hintergrund |
| `--border` | `#444444a8` | Borders (mit Alpha) |
| `--secondary` | `#656565` | Sekundärfarbe, Icons |
| `--primary` | `#737a81` | Primärfarbe (leicht bläuliches Grau) |
| `--text` | `#ffffff` | Haupttext |
| `--text-muted` | `#d4d4d4` | Gedimmter Text |
#### Orange Akzent (Dezent)
| Token | Wert | Verwendung |
|-------|------|------------|
| `--color-accent` | `#EC6925` | Buttons, Badges, Text-Akzente, Logo-Rahmen |
| `--color-accent-hover` | `#d4581a` | Button Hover |
| `--color-accent-light` | `rgba(236, 105, 37, 0.08)` | Badge-Hintergrund, Nav-Active |
| `--color-accent-border` | `rgba(236, 105, 37, 0.25)` | Card Hover Border |
| `--color-accent-dark` | `#b8461a` | Dunkle Variante |
#### Status-Farben (Dark Theme adaptiert)
| Token | Hex | Verwendung |
|-------|-----|------------|
| `--color-success` | `#4ade80` | Erfolg-Meldungen |
| `--color-success-bg` | `rgba(74, 222, 128, 0.08)` | Erfolg-Hintergrund |
| `--color-error` | `#f87171` | Fehler-Meldungen, Pflichtfelder |
| `--color-error-bg` | `rgba(248, 113, 113, 0.08)` | Fehler-Hintergrund |
| `--color-warning` | `#fbbf24` | Warnungen |
| `--color-info` | `#60a5fa` | Info-Meldungen |
### 3.2 Border Radius (Minimal)
| Token | Wert |
|-------|------|
| `--radius-sm` | `2px` |
| `--radius-md` | `3px` |
| `--radius-lg` | `4px` |
| `--radius-xl` | `4px` |
| `--radius-full` | `9999px` (Badges, Pills) |
### 3.3 Typography
- **Font Family:** Inter (Google Fonts)
- **Weights:** 400 (Regular), 500 (Medium), 600 (Semibold), 700 (Bold), 800 (Extrabold)
- **Größen:** xs: 0.75rem bis 6xl: 3.75rem
- **Line Height:** 1.6 (Body), 1.1-1.3 (Headings)
### 3.4 Spacing
| Token | Wert |
|-------|------|
| `--space-xs` | 0.25rem (4px) |
| `--space-sm` | 0.5rem (8px) |
| `--space-md` | 1rem (16px) |
| `--space-lg` | 1.5rem (24px) |
| `--space-xl` | 2rem (32px) |
| `--space-2xl` | 3rem (48px) |
| `--space-3xl` | 4rem (64px) |
| `--space-4xl` | 6rem (96px) |
### 3.5 Shadows (Dark Theme)
| Token | Wert |
|-------|------|
| `--shadow-sm` | `0 1px 2px 0 rgb(0 0 0 / 0.3)` |
| `--shadow-md` | `0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.3)` |
| `--shadow-lg` | `0 10px 15px -3px rgb(0 0 0 / 0.4), 0 4px 6px -4px rgb(0 0 0 / 0.3)` |
| `--shadow-xl` | `0 20px 25px -5px rgb(0 0 0 / 0.5), 0 8px 10px -6px rgb(0 0 0 / 0.3)` |
### 3.6 Transitions
| Token | Dauer |
|-------|-------|
| `--transition-fast` | 150ms ease |
| `--transition-base` | 250ms ease |
| `--transition-slow` | 400ms ease |
## 4. Layout-System
### 4.1 Header
- Sticky, Höhe: 4rem (Desktop), 3.5rem (Mobile)
- Logo links, Desktop-Nav mittig/rechts, Mobile Hamburger rechts
- Background: `var(--panel)`, Border-Bottom: `var(--border)`
### 4.2 Main Content
- Max-Width: 1280px (`max-w-7xl`)
- Padding: 1rem (Mobile), 1.5rem (sm), 2rem (lg)
### 4.3 Footer
- 4-Spalten Grid (1-Spalte auf Mobile)
- Background: `var(--bg)`, Border-Top: `var(--border)`
### 4.4 Responsive Breakpoints
- **sm:** 640px (Tablet Portrait)
- **md:** 768px (Tablet Landscape, Desktop Nav visible)
- **lg:** 1024px (Desktop, 3-4 Column Grids)
- **Mobile-First:** Alle Layouts starten mit 1-Spalte, expandieren bei Breakpoints
## 5. Seiten-Struktur (Sitemap)
```
Home (#/)
├─ Referenzen (#/referenzen)
├─ Mietkatalog (#/mietkatalog)
│ └─ Equipment Detail (#/mietkatalog/:id)
├─ Warenkorb (#/warenkorb)
│ └─ Mietanfrage (#/mietanfrage)
├─ Kontakt (#/kontakt)
├─ Admin (#/admin)
├─ Impressum (#/impressum)
├─ Datenschutz (#/datenschutz)
└─ AGB Vermietung (#/agb-vermietung)
```
**Route-Beschreibungen:**
- `#/warenkorb` Artikel anzeigen, Mengen steuern, entfernen, CTA → /mietanfrage
- `#/mietanfrage` Veranstaltungsdaten + Kontaktdaten + Nachricht, Submit an Rentman
- `#/impressum` Statische rechtliche Angaben (§5 TMG)
- `#/datenschutz` Statische Datenschutzerklärung (DSGVO)
- `#/agb-vermietung` Statische AGB Vermietung
## 6. Komponenten-Design
### 6.1 Cards
- Background: `var(--panel)`
- Border: `1px solid var(--border)`
- Border-Radius: `4px` (--radius-lg)
- Hover: Border wird heller, Shadow wird stärker
### 6.2 Buttons
- **Primary:** Orange bg, white text, 3px radius
- **Secondary:** Surface bg, muted text, border, 3px radius
- **Ghost:** Transparent, muted text, hover surface bg
### 6.3 Inputs
- Background: `var(--surface)`
- Border: `1px solid var(--border-strong)` (#555555)
- Focus: Orange border + subtle orange box-shadow
- Error: Red border + red box-shadow
### 6.4 Badges
- Border-Radius: `9999px` (pill shape)
- Primary: Orange bg (8% alpha), orange text, orange border (20% alpha)
### 6.5 Speaker Grid
- CSS Grid: `repeat(auto-fill, minmax(160px, 1fr))`
- Mobile: 2 columns
- Icons: 48x48px SVG, gray default, orange on hover
## 7. UX States
Alle Views implementieren Loading, Empty, Error und Success States:
- **Loading:** Skeleton-Shimmer Animationen
- **Empty:** Icon + Titel + Message + CTA Button
- **Error:** Alert-Icon + Titel + Message + Retry Button
- **Success:** Checkmark + Bestätigungstext + Weiter-Button
**Zusätzliche States pro Seite:**
- **MietanfragePage:** form, submitting, success, error, validation-error
- **AdminPage:** login, idle, syncing, sync-complete, sync-error
- **Legal Pages (Impressum/Datenschutz/AGB):** loading, content
## 8. Accessibility (WCAG 2.1 AA)
- **Skip Link:** Zum Hauptinhalt springen am Seitenanfang
- **Semantic HTML:** header, main, footer, nav, section, article
- **ARIA:** aria-label, aria-current, aria-expanded, aria-controls, aria-invalid, aria-describedby, role=alert, role=status
- **Focus Visible:** 2px Orange Outline mit 2px Offset
- **Form Labels:** Jedes Input hat label for=..., Pflichtfelder markiert mit *
- **Heading Hierarchy:** h1 > h2 > h3, keine Levels übersprungen
- **Keyboard Navigation:** Alle interaktiven Elemente per Tab erreichbar, Enter auf Cards
- **Color Contrast:** Text #ffffff auf #131313 = 17.9:1 (AAA), Muted #d4d4d4 auf #131313 = 12.6:1 (AAA)
## 9. KI-/Meta-Features
- **robots:** noindex, nofollow, noarchive, nosnippet (KEINE Indexierung gewünscht)
- **JSON-LD:** LocalBusiness Schema mit Adresse, Öffnungszeiten, Services (Schema.org) KI-tauglich
- **OpenGraph:** type, title, description, locale, site_name, url
- **Twitter Card:** summary_large_image
- **Semantic HTML5:** Korrekte Struktur für KI-Crawler
- **KEINE sitemap.xml** nicht gewünscht (noindex)
- **KEINE Indexierung** Domain hms.media-on.de nicht öffentlich indexiert
## 10. Bilder
- **Hero:** Unsplash Konzert-Bild (background-image, 35% opacity, dark gradient overlay)
- **Über uns:** Unsplash Veranstaltungstechnik-Setup Bild
- **Referenzen:** 9 echte HMS-Fotos (von hms-licht-ton.de, lokal auf Webspace gespeichert)
- **Equipment:** Platzhalter-Icons, Felder für echte Bilder vorbereitet (item.image)
- **Speaker Grid:** SVG-Icons (6 Lautsprecher-Typen)
## 11. Prototyp-URLs
- **Aktuell:** https://webspace.media-on.de/hms-prototype/index.html?v=8
- **Dateien:** index.html, style.css, app.js, logo.svg, img/ref1-9.jpg
## 12. Design-Entscheidungen
| Entscheidung | Begründung |
|-------------|------------|
| Dark Theme (Agent Zero Grautöne) | User-Präferenz, professionelle Wirkung |
| Orange nur als Akzent | User-Feedback: Übergänge zu Orange sollten subtil sein |
| Minimale Border-Radius (2-4px) | User-Feedback: abgerundete Ecken nur ganz minimal |
| Vue 3 SPA für Prototyp | Gleiche Framework wie Produktion (Nuxt 3) |
| Echte HMS-Fotos für Referenzen | Authentizität, keine Stock-Fotos |
| SVG-Icons für Speaker Grid | Kompakt, skalierbar, theme-bar |
| Inter Font | Modern, clean, gute Lesbarkeit |
| noindex meta | Domain hms.media-on.de nicht öffentlich indexiert |
| Mietanfrage separat vom Warenkorb | Warenkorb = Items verwalten, Mietanfrage = Formular mit Event-/Kontaktdaten |
| Legal Pages als eigene Routes | Impressum, Datenschutz, AGB Vermietung als statische Seiten mit eigenem Routing |
| Admin Dashboard mit Sync-States | Post-Login: Sync-Trigger, Status-Anzeige, Sync-Log Viewer |
| JSON-LD trotz noindex | KI-Crawler sollen strukturierte Daten erkennen können, ohne Indexierung |