@jungherz-de/glasskit 1.3.5 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/SKILL.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: glasskit-css
3
- description: GlassKit is a pure CSS glassmorphism component library (v1.3.5) with 22 components, Dark & Light mode, design tokens, and BEM-like naming. Use this reference whenever generating HTML that uses GlassKit classes to ensure correct structure, nesting, modifiers, and token usage.
3
+ description: GlassKit is a pure CSS glassmorphism component library (v1.5.0) with 24 components, Dark & Light mode, design tokens, and BEM-like naming. Use this reference whenever generating HTML that uses GlassKit classes to ensure correct structure, nesting, modifiers, and token usage.
4
4
  ---
5
5
 
6
6
  # GlassKit CSS – AI Component Reference
@@ -10,61 +10,61 @@ description: GlassKit is a pure CSS glassmorphism component library (v1.3.5) wit
10
10
 
11
11
  ---
12
12
 
13
- ## 1. Setup & Grundgerüst
13
+ ## 1. Setup & Boilerplate
14
14
 
15
- ### Einbindung
15
+ ### Including the Library
16
16
 
17
17
  ```html
18
- <!-- CDN (empfohlen) -->
19
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/glasskit@1.3/glasskit.min.css">
18
+ <!-- CDN (recommended) -->
19
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/glasskit@1.5/glasskit.min.css">
20
20
 
21
- <!-- Lokal -->
21
+ <!-- Local -->
22
22
  <link rel="stylesheet" href="glasskit.css">
23
23
 
24
- <!-- Optional: Custom Theme danach laden -->
24
+ <!-- Optional: Load custom theme after base library -->
25
25
  <link rel="stylesheet" href="theme-override.css">
26
26
  ```
27
27
 
28
- ### Minimal-Template
28
+ ### Minimal Template
29
29
 
30
30
  ```html
31
31
  <!DOCTYPE html>
32
- <html lang="de" data-theme="dark">
32
+ <html lang="en" data-theme="dark">
33
33
  <head>
34
34
  <meta charset="UTF-8">
35
35
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
36
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/glasskit@1.3/glasskit.min.css">
36
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/glasskit@1.5/glasskit.min.css">
37
37
  </head>
38
38
  <body>
39
39
  <div class="glass-bg">
40
- <!-- Alle Inhalte hier -->
40
+ <!-- All content goes here -->
41
41
  </div>
42
42
  </body>
43
43
  </html>
44
44
  ```
45
45
 
46
- ### Namenskonvention
46
+ ### Naming Convention
47
47
 
48
- - **Prefix:** Alle Komponenten nutzen `glass-` (z.B. `glass-card`, `glass-btn`)
49
- - **Utilities:** Nutzen `gl-` (z.B. `gl-stack`, `gl-row`, `gl-mt-md`)
50
- - **BEM-Logik:** `glass-component__element--modifier`
48
+ - **Prefix:** All components use `glass-` (e.g. `glass-card`, `glass-btn`)
49
+ - **Utilities:** Use `gl-` (e.g. `gl-stack`, `gl-row`, `gl-mt-md`)
50
+ - **BEM logic:** `glass-component__element--modifier`
51
51
  - Element: `glass-card__text`, `glass-modal__header`
52
52
  - Modifier: `glass-btn--primary`, `glass-avatar--lg`
53
- - **State-Klassen:** `is-active`, `is-open`, `is-visible` (nicht BEM, sondern eigenständig)
53
+ - **State classes:** `is-active`, `is-open`, `is-visible` (standalone, not BEM)
54
54
 
55
55
  ### Theming
56
56
 
57
- Das Theme wird über `data-theme` auf `<html>` gesteuert:
57
+ The theme is controlled via `data-theme` on `<html>`:
58
58
 
59
59
  ```html
60
- <!-- Dark Mode (Standard) -->
60
+ <!-- Dark Mode (default) -->
61
61
  <html data-theme="dark">
62
62
 
63
63
  <!-- Light Mode -->
64
64
  <html data-theme="light">
65
65
  ```
66
66
 
67
- Theme-Wechsel per JavaScript:
67
+ Toggle theme via JavaScript:
68
68
 
69
69
  ```js
70
70
  function toggleTheme() {
@@ -78,38 +78,38 @@ function toggleTheme() {
78
78
 
79
79
  ## 2. Design Tokens
80
80
 
81
- Alle visuellen Werte werden über CSS Custom Properties gesteuert. Für Custom-Theming können diese in einer `theme-override.css` überschrieben werden.
81
+ All visual values are controlled via CSS Custom Properties. For custom theming, override them in a `theme-override.css`.
82
82
 
83
- ### Farben
83
+ ### Colors
84
84
 
85
- | Token | Dark | Light | Verwendung |
85
+ | Token | Dark | Light | Usage |
86
86
  |---|---|---|---|
87
- | `--gl-color-primary` | `#f5a623` | `#e8852d` | Primärfarbe, Buttons, aktive Elemente |
88
- | `--gl-color-primary-dark` | `#d4692a` | `#c96a1e` | Gradient-Endwert |
89
- | `--gl-color-primary-mid` | `#e07a24` | `#d97826` | Gradient-Mitte |
90
- | `--gl-color-text` | `#ffffff` | `#1a2a36` | Standard-Textfarbe |
91
- | `--gl-color-text-muted` | `rgba(255,255,255,0.60)` | `rgba(26,42,54,0.55)` | Sekundärer Text |
92
- | `--gl-color-text-heading` | `#ffffff` | `#0f1f2a` | Überschriften |
93
- | `--gl-color-success` | `#34c759` | `#28a745` | Erfolg |
94
- | `--gl-color-error` | `#ff3b30` | `#dc3545` | Fehler |
95
- | `--gl-color-warning` | `#ffcc00` | `#e6a800` | Warnung |
96
-
97
- ### Glas-Oberflächen
98
-
99
- | Token | Dark | Verwendung |
87
+ | `--gl-color-primary` | `#f5a623` | `#e8852d` | Primary color, buttons, active elements |
88
+ | `--gl-color-primary-dark` | `#d4692a` | `#c96a1e` | Gradient end value |
89
+ | `--gl-color-primary-mid` | `#e07a24` | `#d97826` | Gradient midpoint |
90
+ | `--gl-color-text` | `#ffffff` | `#1a2a36` | Default text color |
91
+ | `--gl-color-text-muted` | `rgba(255,255,255,0.60)` | `rgba(26,42,54,0.55)` | Secondary text |
92
+ | `--gl-color-text-heading` | `#ffffff` | `#0f1f2a` | Headings |
93
+ | `--gl-color-success` | `#34c759` | `#28a745` | Success |
94
+ | `--gl-color-error` | `#ff3b30` | `#dc3545` | Error |
95
+ | `--gl-color-warning` | `#ffcc00` | `#e6a800` | Warning |
96
+
97
+ ### Glass Surfaces
98
+
99
+ | Token | Dark | Usage |
100
100
  |---|---|---|
101
- | `--gl-surface-1` | `rgba(255,255,255, 0.08)` | Subtilste Oberfläche (Status) |
102
- | `--gl-surface-2` | `rgba(255,255,255, 0.10)` | Standard (Inputs, Cards) |
103
- | `--gl-surface-3` | `rgba(255,255,255, 0.14)` | Nav Pills, Badges |
104
- | `--gl-surface-4` | `rgba(255,255,255, 0.16)` | Hover States |
105
- | `--gl-surface-5` | `rgba(255,255,255, 0.22)` | Starker Hover |
106
- | `--gl-surface-milk` | `rgba(255,255,255, 0.55)` | Milchig |
107
- | `--gl-surface-milk-strong` | `rgba(255,255,255, 0.75)` | Secondary Button |
108
- | `--gl-surface-overlay` | `rgba(0,0,0, 0.50)` | Modal Overlay |
101
+ | `--gl-surface-1` | `rgba(255,255,255, 0.08)` | Subtlest surface (status) |
102
+ | `--gl-surface-2` | `rgba(255,255,255, 0.10)` | Default (inputs, cards) |
103
+ | `--gl-surface-3` | `rgba(255,255,255, 0.14)` | Nav pills, badges |
104
+ | `--gl-surface-4` | `rgba(255,255,255, 0.16)` | Hover states |
105
+ | `--gl-surface-5` | `rgba(255,255,255, 0.22)` | Strong hover |
106
+ | `--gl-surface-milk` | `rgba(255,255,255, 0.55)` | Milky |
107
+ | `--gl-surface-milk-strong` | `rgba(255,255,255, 0.75)` | Secondary button |
108
+ | `--gl-surface-overlay` | `rgba(0,0,0, 0.50)` | Modal overlay |
109
109
 
110
110
  ### Borders
111
111
 
112
- | Token | Wert |
112
+ | Token | Value |
113
113
  |---|---|
114
114
  | `--gl-border-subtle` | `rgba(255,255,255, 0.18)` |
115
115
  | `--gl-border-medium` | `rgba(255,255,255, 0.30)` |
@@ -120,28 +120,28 @@ Alle visuellen Werte werden über CSS Custom Properties gesteuert. Für Custom-T
120
120
 
121
121
  ### Blur
122
122
 
123
- | Token | Wert |
123
+ | Token | Value |
124
124
  |---|---|
125
- | `--gl-blur` | `24px` (Standard) |
125
+ | `--gl-blur` | `24px` (default) |
126
126
  | `--gl-blur-light` | `16px` |
127
127
  | `--gl-blur-soft` | `12px` |
128
128
  | `--gl-blur-heavy` | `40px` |
129
129
 
130
130
  ### Radii
131
131
 
132
- | Token | Wert | Verwendung |
132
+ | Token | Value | Usage |
133
133
  |---|---|---|
134
- | `--gl-radius-xs` | `8px` | Kleine Elemente |
135
- | `--gl-radius-sm` | `12px` | Badges, kleine Container |
136
- | `--gl-radius-input` | `14px` | Inputs, Textareas |
134
+ | `--gl-radius-xs` | `8px` | Small elements |
135
+ | `--gl-radius-sm` | `12px` | Badges, small containers |
136
+ | `--gl-radius-input` | `14px` | Inputs, textareas |
137
137
  | `--gl-radius-btn` | `16px` | Buttons |
138
138
  | `--gl-radius-card` | `24px` | Cards |
139
- | `--gl-radius-full` | `9999px` | Komplett rund |
140
- | `--gl-radius-pill` | `50%` | Kreisform |
139
+ | `--gl-radius-full` | `9999px` | Fully rounded |
140
+ | `--gl-radius-pill` | `50%` | Circle shape |
141
141
 
142
142
  ### Spacing
143
143
 
144
- | Token | Wert |
144
+ | Token | Value |
145
145
  |---|---|
146
146
  | `--gl-space-2xs` | `4px` |
147
147
  | `--gl-space-xs` | `8px` |
@@ -155,19 +155,19 @@ Alle visuellen Werte werden über CSS Custom Properties gesteuert. Für Custom-T
155
155
 
156
156
  ### Shadows
157
157
 
158
- | Token | Verwendung |
158
+ | Token | Usage |
159
159
  |---|---|
160
160
  | `--gl-shadow-card` | Cards |
161
- | `--gl-shadow-btn` | Standard-Buttons |
162
- | `--gl-shadow-btn-primary` | Primary Button (orange glow) |
163
- | `--gl-shadow-glow` | Glow-Effekt |
164
- | `--gl-shadow-modal` | Modal-Dialog |
165
- | `--gl-shadow-toast` | Toast-Benachrichtigungen |
166
- | `--gl-shadow-focus` | Focus-Ring |
161
+ | `--gl-shadow-btn` | Default buttons |
162
+ | `--gl-shadow-btn-primary` | Primary button (orange glow) |
163
+ | `--gl-shadow-glow` | Glow effect |
164
+ | `--gl-shadow-modal` | Modal dialog |
165
+ | `--gl-shadow-toast` | Toast notifications |
166
+ | `--gl-shadow-focus` | Focus ring |
167
167
 
168
168
  ### Typography
169
169
 
170
- | Token | Wert |
170
+ | Token | Value |
171
171
  |---|---|
172
172
  | `--gl-font-size-xs` | `13px` |
173
173
  | `--gl-font-size-sm` | `14px` |
@@ -182,37 +182,37 @@ Alle visuellen Werte werden über CSS Custom Properties gesteuert. Für Custom-T
182
182
 
183
183
  ---
184
184
 
185
- ## 3. Komponenten-Katalog
185
+ ## 3. Component Catalog
186
186
 
187
187
  ### 3.1 Background
188
188
 
189
- Das äußerste Container-Element. Erzeugt den Aurora-Hintergrund mit Lichteffekten. **Muss immer als Wrapper für alle Inhalte verwendet werden.**
189
+ The outermost container element. Creates the aurora background with light effects. **Must always be used as the wrapper for all content.**
190
190
 
191
191
  ```html
192
192
  <div class="glass-bg">
193
- <!-- Alle Inhalte hier -->
193
+ <!-- All content goes here -->
194
194
  </div>
195
195
  ```
196
196
 
197
- Mit Tab-Bar (fügt unten Padding hinzu):
197
+ With Tab-Bar (adds bottom padding):
198
198
 
199
199
  ```html
200
200
  <div class="glass-bg glass-bg--has-tab-bar">
201
- <!-- Inhalte -->
201
+ <!-- Content -->
202
202
  <nav class="glass-tab-bar">...</nav>
203
203
  </div>
204
204
  ```
205
205
 
206
- | Klasse | Beschreibung |
206
+ | Class | Description |
207
207
  |---|---|
208
- | `.glass-bg` | Vollflächiger Hintergrund mit Aurora-Lichteffekten |
209
- | `.glass-bg--has-tab-bar` | Modifier: Bottom-Padding für Tab-Bar (82px) |
208
+ | `.glass-bg` | Full-screen background with aurora light effects |
209
+ | `.glass-bg--has-tab-bar` | Modifier: bottom padding for tab bar (82px) |
210
210
 
211
211
  ---
212
212
 
213
213
  ### 3.2 Navigation Bar
214
214
 
215
- Transparente Navigationsleiste. Enthält typischerweise `glass-pill` Buttons.
215
+ Transparent navigation bar. Typically contains `glass-pill` buttons.
216
216
 
217
217
  ```html
218
218
  <nav class="glass-nav">
@@ -225,15 +225,15 @@ Transparente Navigationsleiste. Enthält typischerweise `glass-pill` Buttons.
225
225
  </nav>
226
226
  ```
227
227
 
228
- | Klasse | Beschreibung |
228
+ | Class | Description |
229
229
  |---|---|
230
- | `.glass-nav` | Flex-Container mit `space-between`, Padding |
230
+ | `.glass-nav` | Flex container with `space-between`, padding |
231
231
 
232
232
  ---
233
233
 
234
- ### 3.3 Pill-Button
234
+ ### 3.3 Pill Button
235
235
 
236
- Runde Glas-Icon-Buttons (46×46px). Werden in Nav-Bars und als eigenständige Aktions-Buttons verwendet.
236
+ Round glass icon buttons (46×46px). Used in nav bars and as standalone action buttons.
237
237
 
238
238
  ```html
239
239
  <button class="glass-pill">
@@ -241,12 +241,12 @@ Runde Glas-Icon-Buttons (46×46px). Werden in Nav-Bars und als eigenständige Ak
241
241
  </button>
242
242
  ```
243
243
 
244
- | Klasse | Beschreibung |
244
+ | Class | Description |
245
245
  |---|---|
246
- | `.glass-pill` | Runder Glas-Button (46×46px) |
247
- | `.glass-theme-toggle` | Spezieller Pill mit automatischem Moon/Sun-Switch |
246
+ | `.glass-pill` | Round glass button (46×46px) |
247
+ | `.glass-theme-toggle` | Specialized pill with automatic moon/sun switch |
248
248
 
249
- Theme-Toggle (spezialisierter Pill):
249
+ Theme Toggle (specialized pill):
250
250
 
251
251
  ```html
252
252
  <button class="glass-theme-toggle" onclick="toggleTheme()">
@@ -269,9 +269,9 @@ Theme-Toggle (spezialisierter Pill):
269
269
 
270
270
  ---
271
271
 
272
- ### 3.4 Tab-Bar
272
+ ### 3.4 Tab Bar
273
273
 
274
- Fixierte Bottom-Navigation mit Glas-Hintergrund. Benötigt `glass-bg--has-tab-bar` auf dem Background-Container.
274
+ Fixed bottom navigation with glass background. Requires `glass-bg--has-tab-bar` on the background container.
275
275
 
276
276
  ```html
277
277
  <nav class="glass-tab-bar">
@@ -279,139 +279,139 @@ Fixierte Bottom-Navigation mit Glas-Hintergrund. Benötigt `glass-bg--has-tab-ba
279
279
  <span class="glass-tab-bar__icon">
280
280
  <svg viewBox="0 0 24 24"><!-- Icon --></svg>
281
281
  </span>
282
- <span class="glass-tab-bar__label">Start</span>
282
+ <span class="glass-tab-bar__label">Home</span>
283
283
  </button>
284
284
  <button class="glass-tab-bar__item">
285
285
  <span class="glass-tab-bar__icon">
286
286
  <svg viewBox="0 0 24 24"><!-- Icon --></svg>
287
287
  <span class="glass-tab-bar__badge">3</span>
288
288
  </span>
289
- <span class="glass-tab-bar__label">Verträge</span>
289
+ <span class="glass-tab-bar__label">Contracts</span>
290
290
  </button>
291
291
  <button class="glass-tab-bar__item">
292
292
  <span class="glass-tab-bar__icon">
293
293
  <svg viewBox="0 0 24 24"><!-- Icon --></svg>
294
294
  </span>
295
- <span class="glass-tab-bar__label">Profil</span>
295
+ <span class="glass-tab-bar__label">Profile</span>
296
296
  </button>
297
297
  </nav>
298
298
  ```
299
299
 
300
- | Klasse | Beschreibung |
300
+ | Class | Description |
301
301
  |---|---|
302
- | `.glass-tab-bar` | Container: fixed bottom, Glas-Blur |
303
- | `.glass-tab-bar__item` | Einzelner Tab |
304
- | `.glass-tab-bar__item.is-active` | Aktiver Tab (Primary-Farbe) |
305
- | `.glass-tab-bar__icon` | Icon-Wrapper |
306
- | `.glass-tab-bar__badge` | Numerisches Badge im Icon |
307
- | `.glass-tab-bar__label` | Text-Label unter dem Icon |
302
+ | `.glass-tab-bar` | Container: fixed bottom, glass blur |
303
+ | `.glass-tab-bar__item` | Individual tab |
304
+ | `.glass-tab-bar__item.is-active` | Active tab (primary color) |
305
+ | `.glass-tab-bar__icon` | Icon wrapper |
306
+ | `.glass-tab-bar__badge` | Numeric badge inside icon |
307
+ | `.glass-tab-bar__label` | Text label below icon |
308
308
 
309
309
  ---
310
310
 
311
311
  ### 3.5 Title
312
312
 
313
- Seitentitel mit Text-Shadow-Effekt.
313
+ Page title with text shadow effect.
314
314
 
315
315
  ```html
316
- <h1 class="glass-title">Seitentitel</h1>
316
+ <h1 class="glass-title">Page Title</h1>
317
317
  ```
318
318
 
319
- | Klasse | Beschreibung |
319
+ | Class | Description |
320
320
  |---|---|
321
- | `.glass-title` | Großer Titel (24px, bold, text-shadow) |
321
+ | `.glass-title` | Large title (24px, bold, text-shadow) |
322
322
 
323
323
  ---
324
324
 
325
325
  ### 3.6 Card
326
326
 
327
- Glasmorphismus-Container für Inhalte. Optional mit Glow-Effekt (Milchglas-Gradient + Lichtstreifen).
327
+ Glassmorphism container for content. Optionally with glow effect (frosted glass gradient + light streak).
328
328
 
329
329
  ```html
330
330
  <!-- Standard Card -->
331
331
  <div class="glass-card">
332
- <p class="glass-card__text">Inhalt</p>
332
+ <p class="glass-card__text">Content</p>
333
333
  </div>
334
334
 
335
- <!-- Glow Card mit Icon -->
335
+ <!-- Glow Card with Icon -->
336
336
  <div class="glass-card glass-card--glow">
337
337
  <div class="glass-card__icon">
338
338
  <svg viewBox="0 0 64 64"><!-- Icon SVG --></svg>
339
339
  </div>
340
- <p class="glass-card__text">Beschreibungstext</p>
340
+ <p class="glass-card__text">Description text goes here.</p>
341
341
  </div>
342
342
  ```
343
343
 
344
- | Klasse | Beschreibung |
344
+ | Class | Description |
345
345
  |---|---|
346
- | `.glass-card` | Basis-Glas-Container (border-radius: 24px) |
347
- | `.glass-card--glow` | Milchglas-Gradient mit Lichtstreifen-Effekt |
348
- | `.glass-card__icon` | Zentrierter Icon-Wrapper (SVG, 48×48px) |
349
- | `.glass-card__text` | Beschreibungstext (muted) |
346
+ | `.glass-card` | Base glass container (border-radius: 24px) |
347
+ | `.glass-card--glow` | Frosted glass gradient with light streak effect |
348
+ | `.glass-card__icon` | Centered icon wrapper (SVG, 48×48px) |
349
+ | `.glass-card__text` | Description text (muted) |
350
350
 
351
351
  ---
352
352
 
353
353
  ### 3.7 Buttons
354
354
 
355
- Full-Width-Buttons (56px Höhe) mit drei Varianten und Größen-Modifiern.
355
+ Full-width buttons (56px height) with three variants and size modifiers.
356
356
 
357
357
  ```html
358
- <!-- Primary: Farbgradient, Hauptaktion -->
358
+ <!-- Primary: Color gradient, main action -->
359
359
  <button class="glass-btn glass-btn--primary">
360
360
  <svg viewBox="0 0 24 24"><!-- Optional: Icon --></svg>
361
- Primäre Aktion
361
+ Primary Action
362
362
  </button>
363
363
 
364
- <!-- Secondary: Milchig-weiß -->
365
- <button class="glass-btn glass-btn--secondary">Sekundäre Aktion</button>
364
+ <!-- Secondary: Milky white -->
365
+ <button class="glass-btn glass-btn--secondary">Secondary Action</button>
366
366
 
367
- <!-- Tertiary: Subtiles Glas -->
368
- <button class="glass-btn glass-btn--tertiary">Tertiäre Aktion</button>
367
+ <!-- Tertiary: Subtle glass -->
368
+ <button class="glass-btn glass-btn--tertiary">Tertiary Action</button>
369
369
 
370
- <!-- Größen -->
371
- <button class="glass-btn glass-btn--primary glass-btn--sm">Klein (44px)</button>
372
- <button class="glass-btn glass-btn--primary glass-btn--lg">Groß (64px)</button>
370
+ <!-- Sizes -->
371
+ <button class="glass-btn glass-btn--primary glass-btn--sm">Small (44px)</button>
372
+ <button class="glass-btn glass-btn--primary glass-btn--lg">Large (64px)</button>
373
373
 
374
- <!-- Auto-Width (statt full-width) -->
374
+ <!-- Auto-width (instead of full-width) -->
375
375
  <button class="glass-btn glass-btn--primary glass-btn--auto">Auto</button>
376
376
  ```
377
377
 
378
- | Klasse | Beschreibung |
378
+ | Class | Description |
379
379
  |---|---|
380
- | `.glass-btn` | Basis (56px Höhe, width: 100%) |
381
- | `.glass-btn--primary` | Farbgradient (orange) |
382
- | `.glass-btn--secondary` | Milchig-weiß, dunkler Text |
383
- | `.glass-btn--tertiary` | Subtiles Glas, transparenter |
384
- | `.glass-btn--sm` | 44px Höhe |
385
- | `.glass-btn--lg` | 64px Höhe |
386
- | `.glass-btn--auto` | Width: auto statt 100% |
380
+ | `.glass-btn` | Base (56px height, width: 100%) |
381
+ | `.glass-btn--primary` | Color gradient (orange) |
382
+ | `.glass-btn--secondary` | Milky white, dark text |
383
+ | `.glass-btn--tertiary` | Subtle glass, more transparent |
384
+ | `.glass-btn--sm` | 44px height |
385
+ | `.glass-btn--lg` | 64px height |
386
+ | `.glass-btn--auto` | Width: auto instead of 100% |
387
387
 
388
- **Wichtig:** Buttons sind standardmäßig `width: 100%`. Für inline/auto-breite Buttons `--auto` verwenden.
388
+ **Important:** Buttons default to `width: 100%`. Use `--auto` for inline/auto-width buttons.
389
389
 
390
390
  ---
391
391
 
392
392
  ### 3.8 Badge
393
393
 
394
- Tags und Labels.
394
+ Tags and labels.
395
395
 
396
396
  ```html
397
- <span class="glass-badge">Standard</span>
398
- <span class="glass-badge glass-badge--primary">Aktiv</span>
399
- <span class="glass-badge glass-badge--success">Fertig</span>
400
- <span class="glass-badge glass-badge--error">Fehler</span>
397
+ <span class="glass-badge">Default</span>
398
+ <span class="glass-badge glass-badge--primary">Active</span>
399
+ <span class="glass-badge glass-badge--success">Done</span>
400
+ <span class="glass-badge glass-badge--error">Error</span>
401
401
  ```
402
402
 
403
- | Klasse | Beschreibung |
403
+ | Class | Description |
404
404
  |---|---|
405
- | `.glass-badge` | Standard (subtiles Glas) |
406
- | `.glass-badge--primary` | Primary-Farbe |
407
- | `.glass-badge--success` | Grün |
408
- | `.glass-badge--error` | Rot |
405
+ | `.glass-badge` | Default (subtle glass) |
406
+ | `.glass-badge--primary` | Primary color |
407
+ | `.glass-badge--success` | Green |
408
+ | `.glass-badge--error` | Red |
409
409
 
410
410
  ---
411
411
 
412
412
  ### 3.9 Avatar
413
413
 
414
- Glas-Kreise in drei Größen. Für Initialen, Icons oder Bilder.
414
+ Glass circles in three sizes. For initials, icons, or images.
415
415
 
416
416
  ```html
417
417
  <div class="glass-avatar glass-avatar--sm">S</div>
@@ -419,17 +419,17 @@ Glas-Kreise in drei Größen. Für Initialen, Icons oder Bilder.
419
419
  <div class="glass-avatar glass-avatar--lg">L</div>
420
420
  ```
421
421
 
422
- | Klasse | Beschreibung |
422
+ | Class | Description |
423
423
  |---|---|
424
- | `.glass-avatar` | Standard-Größe (Medium) |
425
- | `.glass-avatar--sm` | Klein |
426
- | `.glass-avatar--lg` | Groß |
424
+ | `.glass-avatar` | Default size (medium) |
425
+ | `.glass-avatar--sm` | Small |
426
+ | `.glass-avatar--lg` | Large |
427
427
 
428
428
  ---
429
429
 
430
430
  ### 3.10 Divider
431
431
 
432
- Horizontale Trennlinie mit Fade-Effekt.
432
+ Horizontal separator line with fade effect.
433
433
 
434
434
  ```html
435
435
  <hr class="glass-divider">
@@ -439,7 +439,7 @@ Horizontale Trennlinie mit Fade-Effekt.
439
439
 
440
440
  ### 3.11 Status Notice
441
441
 
442
- Info-/Hinweis-Card mit Icon und Text.
442
+ Info/notice card with icon and text.
443
443
 
444
444
  ```html
445
445
  <div class="glass-status">
@@ -448,64 +448,64 @@ Info-/Hinweis-Card mit Icon und Text.
448
448
  <line x1="12" y1="16" x2="12" y2="12"/>
449
449
  <line x1="12" y1="8" x2="12" y2="8"/>
450
450
  </svg>
451
- <p>Noch keine Dokumente erfasst.</p>
451
+ <p>No documents captured yet.</p>
452
452
  </div>
453
453
  ```
454
454
 
455
- | Klasse | Beschreibung |
455
+ | Class | Description |
456
456
  |---|---|
457
- | `.glass-status` | Container mit subtiler Glas-Oberfläche |
457
+ | `.glass-status` | Container with subtle glass surface |
458
458
 
459
459
  ---
460
460
 
461
461
  ### 3.12 Modal
462
462
 
463
- Zentrierter Dialog mit Blur-Overlay. Wird über die State-Klasse `is-active` auf dem Overlay gesteuert.
463
+ Centered dialog with blur overlay. Controlled via the `is-active` state class on the overlay.
464
464
 
465
465
  ```html
466
466
  <div class="glass-modal-overlay is-active">
467
467
  <div class="glass-modal">
468
468
  <div class="glass-modal__header">
469
- <h2 class="glass-modal__title">Vertrag löschen?</h2>
469
+ <h2 class="glass-modal__title">Delete contract?</h2>
470
470
  </div>
471
471
  <div class="glass-modal__body">
472
- <p>Dieser Vorgang kann nicht rückgängig gemacht werden.</p>
472
+ <p>This action cannot be undone.</p>
473
473
  </div>
474
474
  <div class="glass-modal__footer">
475
- <button class="glass-modal__action">Abbrechen</button>
476
- <button class="glass-modal__action glass-modal__action--primary">Bestätigen</button>
475
+ <button class="glass-modal__action">Cancel</button>
476
+ <button class="glass-modal__action glass-modal__action--primary">Confirm</button>
477
477
  </div>
478
478
  </div>
479
479
  </div>
480
480
  ```
481
481
 
482
- Danger-Variante:
482
+ Danger variant:
483
483
 
484
484
  ```html
485
- <button class="glass-modal__action glass-modal__action--danger">Löschen</button>
485
+ <button class="glass-modal__action glass-modal__action--danger">Delete</button>
486
486
  ```
487
487
 
488
- | Klasse | Beschreibung |
488
+ | Class | Description |
489
489
  |---|---|
490
- | `.glass-modal-overlay` | Fullscreen-Container mit Blur |
491
- | `.glass-modal-overlay.is-active` | Sichtbar + animiert |
492
- | `.glass-modal` | Dialog-Box |
493
- | `.glass-modal__header` | Kopfbereich |
494
- | `.glass-modal__title` | Titel (20px, bold) |
495
- | `.glass-modal__body` | Inhaltsbereich |
496
- | `.glass-modal__footer` | Aktionsleiste |
497
- | `.glass-modal__action` | Action-Button im Footer |
498
- | `.glass-modal__action--primary` | Primäre Aktion (farbig) |
499
- | `.glass-modal__action--danger` | Gefährliche Aktion (rot) |
490
+ | `.glass-modal-overlay` | Fullscreen container with blur |
491
+ | `.glass-modal-overlay.is-active` | Visible + animated |
492
+ | `.glass-modal` | Dialog box |
493
+ | `.glass-modal__header` | Header area |
494
+ | `.glass-modal__title` | Title (20px, bold) |
495
+ | `.glass-modal__body` | Content area |
496
+ | `.glass-modal__footer` | Action bar |
497
+ | `.glass-modal__action` | Action button in footer |
498
+ | `.glass-modal__action--primary` | Primary action (colored) |
499
+ | `.glass-modal__action--danger` | Dangerous action (red) |
500
500
 
501
- **Wichtig:** `is-active` kommt auf `.glass-modal-overlay`, **nicht** auf `.glass-modal`.
501
+ **Important:** `is-active` goes on `.glass-modal-overlay`, **not** on `.glass-modal`.
502
502
 
503
- JavaScript zum Öffnen/Schließen:
503
+ JavaScript to open/close:
504
504
 
505
505
  ```js
506
- // Öffnen
506
+ // Open
507
507
  document.querySelector('.glass-modal-overlay').classList.add('is-active');
508
- // Schließen
508
+ // Close
509
509
  document.querySelector('.glass-modal-overlay').classList.remove('is-active');
510
510
  ```
511
511
 
@@ -513,46 +513,46 @@ document.querySelector('.glass-modal-overlay').classList.remove('is-active');
513
513
 
514
514
  ### 3.13 Toast
515
515
 
516
- Temporäre Benachrichtigung. Sichtbar über `is-visible`. Drei Varianten.
516
+ Temporary notification. Visible via `is-visible`. Three variants.
517
517
 
518
518
  ```html
519
519
  <div class="glass-toast glass-toast--success is-visible">
520
520
  <svg class="glass-toast__icon" viewBox="0 0 24 24"><!-- Icon --></svg>
521
- <span class="glass-toast__text">Erfolgreich gespeichert!</span>
521
+ <span class="glass-toast__text">Saved successfully!</span>
522
522
  </div>
523
523
  ```
524
524
 
525
- | Klasse | Beschreibung |
525
+ | Class | Description |
526
526
  |---|---|
527
- | `.glass-toast` | Basis-Container |
528
- | `.glass-toast--success` | Grüner Akzent |
529
- | `.glass-toast--error` | Roter Akzent |
530
- | `.glass-toast--warning` | Gelber Akzent |
531
- | `.glass-toast.is-visible` | Sichtbar + eingeblendet |
527
+ | `.glass-toast` | Base container |
528
+ | `.glass-toast--success` | Green accent |
529
+ | `.glass-toast--error` | Red accent |
530
+ | `.glass-toast--warning` | Yellow accent |
531
+ | `.glass-toast.is-visible` | Visible + faded in |
532
532
  | `.glass-toast__icon` | Icon (SVG) |
533
- | `.glass-toast__text` | Nachrichtentext |
533
+ | `.glass-toast__text` | Message text |
534
534
 
535
535
  ---
536
536
 
537
537
  ### 3.14 Input
538
538
 
539
- Textfelder mit Glas-Hintergrund. Werden in einer `glass-input-group` mit Label und optionalem Hint gewrappt.
539
+ Text fields with glass background. Wrapped in a `glass-input-group` with label and optional hint.
540
540
 
541
541
  ```html
542
542
  <div class="glass-input-group">
543
- <label class="glass-label">Vertragsname</label>
544
- <input class="glass-input" type="text" placeholder="z.B. Mietvertrag">
545
- <span class="glass-hint">Optionaler Hilfetext</span>
543
+ <label class="glass-label">Contract Name</label>
544
+ <input class="glass-input" type="text" placeholder="e.g. Rental Agreement">
545
+ <span class="glass-hint">Optional help text</span>
546
546
  </div>
547
547
  ```
548
548
 
549
- Error-State:
549
+ Error state:
550
550
 
551
551
  ```html
552
552
  <div class="glass-input-group">
553
- <label class="glass-label">E-Mail</label>
553
+ <label class="glass-label">Email</label>
554
554
  <input class="glass-input glass-input--error" type="email" value="invalid@">
555
- <span class="glass-hint glass-hint--error">Bitte gültige E-Mail eingeben</span>
555
+ <span class="glass-hint glass-hint--error">Please enter a valid email address</span>
556
556
  </div>
557
557
  ```
558
558
 
@@ -562,52 +562,52 @@ Disabled:
562
562
  <input class="glass-input" type="text" disabled>
563
563
  ```
564
564
 
565
- | Klasse | Beschreibung |
565
+ | Class | Description |
566
566
  |---|---|
567
- | `.glass-input-group` | Wrapper für Label + Input + Hint |
568
- | `.glass-label` | Label (klein, muted, uppercase) |
569
- | `.glass-input` | Text-Input (Glas-Hintergrund) |
570
- | `.glass-input--error` | Roter Border für Fehlerzustand |
571
- | `.glass-hint` | Hilfetext unter dem Input |
572
- | `.glass-hint--error` | Roter Hilfetext |
567
+ | `.glass-input-group` | Wrapper for label + input + hint |
568
+ | `.glass-label` | Label (small, muted, uppercase) |
569
+ | `.glass-input` | Text input (glass background) |
570
+ | `.glass-input--error` | Red border for error state |
571
+ | `.glass-hint` | Help text below input |
572
+ | `.glass-hint--error` | Red help text |
573
573
 
574
574
  ---
575
575
 
576
576
  ### 3.15 Textarea
577
577
 
578
- Mehrzeiliges Textfeld.
578
+ Multi-line text field.
579
579
 
580
580
  ```html
581
- <textarea class="glass-textarea" placeholder="Optionale Anmerkungen…"></textarea>
581
+ <textarea class="glass-textarea" placeholder="Optional notes…"></textarea>
582
582
  ```
583
583
 
584
- | Klasse | Beschreibung |
584
+ | Class | Description |
585
585
  |---|---|
586
- | `.glass-textarea` | Mehrzeiliges Glas-Input |
586
+ | `.glass-textarea` | Multi-line glass input |
587
587
 
588
588
  ---
589
589
 
590
590
  ### 3.16 Select
591
591
 
592
- Dropdown mit Glas-Styling und Custom-Chevron.
592
+ Dropdown with glass styling and custom chevron.
593
593
 
594
594
  ```html
595
595
  <select class="glass-select">
596
- <option>Bitte wählen…</option>
597
- <option>Versicherung</option>
598
- <option>Mietvertrag</option>
596
+ <option>Please select…</option>
597
+ <option>Insurance</option>
598
+ <option>Rental Agreement</option>
599
599
  </select>
600
600
  ```
601
601
 
602
- | Klasse | Beschreibung |
602
+ | Class | Description |
603
603
  |---|---|
604
- | `.glass-select` | Styled Dropdown |
604
+ | `.glass-select` | Styled dropdown |
605
605
 
606
606
  ---
607
607
 
608
608
  ### 3.17 Search
609
609
 
610
- Suchfeld mit eingebettetem Such-Icon.
610
+ Search field with embedded search icon.
611
611
 
612
612
  ```html
613
613
  <div class="glass-search">
@@ -615,22 +615,22 @@ Suchfeld mit eingebettetem Such-Icon.
615
615
  <circle cx="11" cy="11" r="8"/>
616
616
  <line x1="21" y1="21" x2="16.65" y2="16.65"/>
617
617
  </svg>
618
- <input class="glass-input" type="search" placeholder="Verträge durchsuchen…">
618
+ <input class="glass-input" type="search" placeholder="Search contracts…">
619
619
  </div>
620
620
  ```
621
621
 
622
- | Klasse | Beschreibung |
622
+ | Class | Description |
623
623
  |---|---|
624
624
  | `.glass-search` | Wrapper (position: relative) |
625
- | `.glass-search__icon` | Positioniertes Such-Icon (links) |
625
+ | `.glass-search__icon` | Positioned search icon (left) |
626
626
 
627
- **Wichtig:** Das Input innerhalb von `.glass-search` nutzt die reguläre `.glass-input` Klasse.
627
+ **Important:** The input inside `.glass-search` uses the regular `.glass-input` class.
628
628
 
629
629
  ---
630
630
 
631
631
  ### 3.18 Toggle Switch
632
632
 
633
- iOS-artiger Schalter.
633
+ iOS-style switch.
634
634
 
635
635
  ```html
636
636
  <label class="glass-toggle">
@@ -638,25 +638,25 @@ iOS-artiger Schalter.
638
638
  <span class="glass-toggle__track">
639
639
  <span class="glass-toggle__thumb"></span>
640
640
  </span>
641
- <span class="glass-toggle__label">Benachrichtigungen</span>
641
+ <span class="glass-toggle__label">Notifications</span>
642
642
  </label>
643
643
  ```
644
644
 
645
- | Klasse | Beschreibung |
645
+ | Class | Description |
646
646
  |---|---|
647
- | `.glass-toggle` | Äußeres Label (Flex-Container) |
648
- | `.glass-toggle__input` | Verstecktes Checkbox-Input |
649
- | `.glass-toggle__track` | Sichtbare Schiene |
650
- | `.glass-toggle__thumb` | Beweglicher Knopf |
651
- | `.glass-toggle__label` | Text-Label |
647
+ | `.glass-toggle` | Outer label (flex container) |
648
+ | `.glass-toggle__input` | Hidden checkbox input |
649
+ | `.glass-toggle__track` | Visible track |
650
+ | `.glass-toggle__thumb` | Movable thumb |
651
+ | `.glass-toggle__label` | Text label |
652
652
 
653
- **State:** `:checked` auf dem Input aktiviert den Toggle visuell.
653
+ **State:** `:checked` on the input activates the toggle visually.
654
654
 
655
655
  ---
656
656
 
657
657
  ### 3.19 Checkbox
658
658
 
659
- Animierte Checkbox mit Checkmark-SVG.
659
+ Animated checkbox with checkmark SVG.
660
660
 
661
661
  ```html
662
662
  <label class="glass-checkbox">
@@ -664,26 +664,26 @@ Animierte Checkbox mit Checkmark-SVG.
664
664
  <span class="glass-checkbox__box">
665
665
  <svg viewBox="0 0 24 24"><polyline points="20 6 9 17 4 12"/></svg>
666
666
  </span>
667
- <span class="glass-checkbox__label">AGB akzeptieren</span>
667
+ <span class="glass-checkbox__label">Accept terms of service</span>
668
668
  </label>
669
669
  ```
670
670
 
671
- | Klasse | Beschreibung |
671
+ | Class | Description |
672
672
  |---|---|
673
- | `.glass-checkbox` | Äußeres Label |
674
- | `.glass-checkbox__input` | Verstecktes Checkbox-Input |
675
- | `.glass-checkbox__box` | Sichtbare Box mit Checkmark-SVG |
676
- | `.glass-checkbox__label` | Text-Label |
673
+ | `.glass-checkbox` | Outer label |
674
+ | `.glass-checkbox__input` | Hidden checkbox input |
675
+ | `.glass-checkbox__box` | Visible box with checkmark SVG |
676
+ | `.glass-checkbox__label` | Text label |
677
677
 
678
678
  ---
679
679
 
680
680
  ### 3.20 Radio Button
681
681
 
682
- Animierter Radio-Button mit Dot.
682
+ Animated radio button with dot.
683
683
 
684
684
  ```html
685
685
  <label class="glass-radio">
686
- <input class="glass-radio__input" type="radio" name="gruppe" checked>
686
+ <input class="glass-radio__input" type="radio" name="group" checked>
687
687
  <span class="glass-radio__circle">
688
688
  <span class="glass-radio__dot"></span>
689
689
  </span>
@@ -691,7 +691,7 @@ Animierter Radio-Button mit Dot.
691
691
  </label>
692
692
 
693
693
  <label class="glass-radio">
694
- <input class="glass-radio__input" type="radio" name="gruppe">
694
+ <input class="glass-radio__input" type="radio" name="group">
695
695
  <span class="glass-radio__circle">
696
696
  <span class="glass-radio__dot"></span>
697
697
  </span>
@@ -699,26 +699,26 @@ Animierter Radio-Button mit Dot.
699
699
  </label>
700
700
  ```
701
701
 
702
- | Klasse | Beschreibung |
702
+ | Class | Description |
703
703
  |---|---|
704
- | `.glass-radio` | Äußeres Label |
705
- | `.glass-radio__input` | Verstecktes Radio-Input |
706
- | `.glass-radio__circle` | Sichtbarer Kreis |
707
- | `.glass-radio__dot` | Innerer Punkt (sichtbar bei :checked) |
708
- | `.glass-radio__label` | Text-Label |
704
+ | `.glass-radio` | Outer label |
705
+ | `.glass-radio__input` | Hidden radio input |
706
+ | `.glass-radio__circle` | Visible circle |
707
+ | `.glass-radio__dot` | Inner dot (visible on :checked) |
708
+ | `.glass-radio__label` | Text label |
709
709
 
710
- **Wichtig:** Radio-Buttons der gleichen Gruppe brauchen denselben `name`-Attributwert.
710
+ **Important:** Radio buttons in the same group need the same `name` attribute value.
711
711
 
712
712
  ---
713
713
 
714
714
  ### 3.21 Range Slider
715
715
 
716
- Slider mit Gradient-Thumb. Wird in einer Gruppe mit Header und Wertanzeige verwendet.
716
+ Slider with gradient thumb. Used in a group with header and value display.
717
717
 
718
718
  ```html
719
719
  <div class="glass-range-group">
720
720
  <div class="glass-range-header">
721
- <label class="glass-label">Bildqualität</label>
721
+ <label class="glass-label">Image Quality</label>
722
722
  <span class="glass-range-value" id="range-val">75%</span>
723
723
  </div>
724
724
  <input class="glass-range" type="range" min="0" max="100" value="75"
@@ -726,18 +726,18 @@ Slider mit Gradient-Thumb. Wird in einer Gruppe mit Header und Wertanzeige verwe
726
726
  </div>
727
727
  ```
728
728
 
729
- | Klasse | Beschreibung |
729
+ | Class | Description |
730
730
  |---|---|
731
731
  | `.glass-range-group` | Wrapper |
732
- | `.glass-range-header` | Flex-Container für Label + Wert |
733
- | `.glass-range-value` | Wertanzeige (rechts) |
734
- | `.glass-range` | Der eigentliche Slider |
732
+ | `.glass-range-header` | Flex container for label + value |
733
+ | `.glass-range-value` | Value display (right) |
734
+ | `.glass-range` | The actual slider |
735
735
 
736
736
  ---
737
737
 
738
738
  ### 3.22 Progress Bar
739
739
 
740
- Fortschrittsbalken mit optionalem Shimmer-Effekt.
740
+ Progress bar with optional shimmer effect.
741
741
 
742
742
  ```html
743
743
  <div class="glass-progress">
@@ -751,76 +751,247 @@ Fortschrittsbalken mit optionalem Shimmer-Effekt.
751
751
  </div>
752
752
  ```
753
753
 
754
- | Klasse | Beschreibung |
754
+ | Class | Description |
755
755
  |---|---|
756
- | `.glass-progress` | Basis-Container |
757
- | `.glass-progress--sm` | Schmaler Track (4px) |
758
- | `.glass-progress--lg` | Breiter Track (12px) |
759
- | `.glass-progress--success` | Grüner Balken |
760
- | `.glass-progress--error` | Roter Balken |
761
- | `.glass-progress__header` | Flex-Container für Label + Wert |
762
- | `.glass-progress__label` | Bezeichnung (links) |
763
- | `.glass-progress__value` | Prozentwert (rechts) |
764
- | `.glass-progress__track` | Hintergrund-Schiene |
765
- | `.glass-progress__fill` | Gefüllter Bereich (Breite via `style="width: X%"`) |
766
-
767
- **Wichtig:** Die Fortschrittsbreite wird über inline `style="width: X%"` auf `.glass-progress__fill` gesteuert.
756
+ | `.glass-progress` | Base container |
757
+ | `.glass-progress--sm` | Narrow track (4px) |
758
+ | `.glass-progress--lg` | Wide track (12px) |
759
+ | `.glass-progress--success` | Green bar |
760
+ | `.glass-progress--error` | Red bar |
761
+ | `.glass-progress__header` | Flex container for label + value |
762
+ | `.glass-progress__label` | Label (left) |
763
+ | `.glass-progress__value` | Percentage value (right) |
764
+ | `.glass-progress__track` | Background track |
765
+ | `.glass-progress__fill` | Filled area (width via `style="width: X%"`) |
766
+
767
+ **Important:** Progress width is controlled via inline `style="width: X%"` on `.glass-progress__fill`.
768
768
 
769
769
  ---
770
770
 
771
771
  ### 3.23 Accordion
772
772
 
773
- Auf-/zuklappbare Inhaltsbereiche. Gesteuert über `is-open` auf den Items.
773
+ Collapsible content sections. Controlled via `is-open` on items.
774
774
 
775
775
  ```html
776
776
  <div class="glass-accordion">
777
777
  <div class="glass-accordion__item is-open">
778
778
  <button class="glass-accordion__trigger" onclick="this.parentElement.classList.toggle('is-open')">
779
- <span>Frage eins?</span>
779
+ <span>Question one?</span>
780
780
  <span class="glass-accordion__trigger-icon">
781
781
  <svg viewBox="0 0 24 24"><polyline points="6 9 12 15 18 9"/></svg>
782
782
  </span>
783
783
  </button>
784
784
  <div class="glass-accordion__content">
785
785
  <div class="glass-accordion__body">
786
- Die Antwort auf Frage eins.
786
+ The answer to question one.
787
787
  </div>
788
788
  </div>
789
789
  </div>
790
790
 
791
791
  <div class="glass-accordion__item">
792
792
  <button class="glass-accordion__trigger" onclick="this.parentElement.classList.toggle('is-open')">
793
- <span>Frage zwei?</span>
793
+ <span>Question two?</span>
794
794
  <span class="glass-accordion__trigger-icon">
795
795
  <svg viewBox="0 0 24 24"><polyline points="6 9 12 15 18 9"/></svg>
796
796
  </span>
797
797
  </button>
798
798
  <div class="glass-accordion__content">
799
799
  <div class="glass-accordion__body">
800
- Die Antwort auf Frage zwei.
800
+ The answer to question two.
801
801
  </div>
802
802
  </div>
803
803
  </div>
804
804
  </div>
805
805
  ```
806
806
 
807
- | Klasse | Beschreibung |
807
+ | Class | Description |
808
808
  |---|---|
809
809
  | `.glass-accordion` | Container |
810
- | `.glass-accordion__item` | Einzelnes Item |
811
- | `.glass-accordion__item.is-open` | Geöffnetes Item |
812
- | `.glass-accordion__trigger` | Klickbarer Header-Button |
813
- | `.glass-accordion__trigger-icon` | Chevron-Icon (rotiert bei open) |
814
- | `.glass-accordion__content` | Wrapper für animierte Höhe |
815
- | `.glass-accordion__body` | Eigentlicher Inhalt |
810
+ | `.glass-accordion__item` | Individual item |
811
+ | `.glass-accordion__item.is-open` | Expanded item |
812
+ | `.glass-accordion__trigger` | Clickable header button |
813
+ | `.glass-accordion__trigger-icon` | Chevron icon (rotates on open) |
814
+ | `.glass-accordion__content` | Wrapper for animated height |
815
+ | `.glass-accordion__body` | Actual content |
816
816
 
817
817
  ---
818
818
 
819
- ## 4. Utility-Klassen
819
+ ### 3.24 List
820
820
 
821
- ### Stack (Vertikal)
821
+ iOS-style grouped settings list. Items can carry a leading icon, a title with optional subtitle, and a trailing element (chevron, value, button). Dividers between items are drawn automatically via `::after` &mdash; **never add divider markup manually**.
822
822
 
823
- Flexbox-Column mit Gap.
823
+ ```html
824
+ <!-- Settings-style list with icons + subtitles + trailing -->
825
+ <ul class="glass-list">
826
+ <li class="glass-list__item glass-list__item--interactive">
827
+ <span class="glass-list__leading">
828
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
829
+ <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/>
830
+ <polyline points="7 10 12 15 17 10"/>
831
+ <line x1="12" y1="15" x2="12" y2="3"/>
832
+ </svg>
833
+ </span>
834
+ <div class="glass-list__content">
835
+ <div class="glass-list__title">iOS 26.4 Update</div>
836
+ <div class="glass-list__subtitle">2.1 GB · Available now</div>
837
+ </div>
838
+ <div class="glass-list__trailing">
839
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
840
+ <polyline points="9 18 15 12 9 6"/>
841
+ </svg>
842
+ </div>
843
+ </li>
844
+
845
+ <li class="glass-list__item glass-list__item--interactive">
846
+ <span class="glass-list__leading">
847
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
848
+ <rect x="2" y="5" width="20" height="14" rx="2"/>
849
+ <line x1="2" y1="10" x2="22" y2="10"/>
850
+ </svg>
851
+ </span>
852
+ <div class="glass-list__content">
853
+ <div class="glass-list__title">Apple One</div>
854
+ <div class="glass-list__subtitle">Family — renews Apr 28</div>
855
+ </div>
856
+ <div class="glass-list__trailing">$22.95</div>
857
+ </li>
858
+
859
+ <li class="glass-list__item glass-list__item--center glass-list__item--interactive">
860
+ View all subscriptions
861
+ </li>
862
+ </ul>
863
+ ```
864
+
865
+ ```html
866
+ <!-- Compact menu with danger action -->
867
+ <ul class="glass-list">
868
+ <li class="glass-list__item glass-list__item--center glass-list__item--interactive">Share</li>
869
+ <li class="glass-list__item glass-list__item--center glass-list__item--interactive">Duplicate</li>
870
+ <li class="glass-list__item glass-list__item--center glass-list__item--interactive glass-list__item--danger">Delete</li>
871
+ </ul>
872
+ ```
873
+
874
+ ```html
875
+ <!-- Grouped sections with large icons, multi-line subtitle, trailing value -->
876
+ <div class="glass-list__section-header">Recommendations</div>
877
+ <ul class="glass-list">
878
+ <li class="glass-list__item glass-list__item--interactive">
879
+ <span class="glass-list__leading glass-list__leading--lg">
880
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><!-- icon --></svg>
881
+ </span>
882
+ <div class="glass-list__content">
883
+ <div class="glass-list__title">Review downloaded media</div>
884
+ <div class="glass-list__subtitle glass-list__subtitle--wrap">Save up to 1.38 GB. Review all videos and audio files on your device and remove them as needed.</div>
885
+ </div>
886
+ <div class="glass-list__trailing">
887
+ <span class="glass-list__value">24 MB</span>
888
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>
889
+ </div>
890
+ </li>
891
+ <li class="glass-list__item glass-list__item--center glass-list__item--interactive glass-list__item--accent">View all downloads</li>
892
+ </ul>
893
+ ```
894
+
895
+ | Class | Description |
896
+ |---|---|
897
+ | `.glass-list` | Grouped surface container |
898
+ | `.glass-list--flush` | Edge-to-edge variant (no side margin / radius). Assumes parent has `--gl-space-lg` horizontal padding. |
899
+ | `.glass-list--bare` | Strips background, border & shadow &mdash; for embedding inside `.glass-popover` or `.glass-card`. |
900
+ | `.glass-list__section-header` | Section label above a `.glass-list` — uppercase, small, muted |
901
+ | `.glass-list__item` | List row (use `<li>`, `<a>`, or `<button>`) |
902
+ | `.glass-list__item--interactive` | Adds hover / focus / active states |
903
+ | `.glass-list__item--center` | Centered single-text variant with ellipsis truncation |
904
+ | `.glass-list__item--danger` | Red text for destructive actions |
905
+ | `.glass-list__item--accent` | Primary-colored text for accent actions |
906
+ | `.glass-list__leading` | Leading slot (28×28, holds an icon SVG) |
907
+ | `.glass-list__leading--lg` | Large leading slot (40×40, rounded square, supports `<img>`) |
908
+ | `.glass-list__content` | Flexible middle slot — takes remaining width, enables truncation |
909
+ | `.glass-list__title` | Primary text (medium weight, ellipsis) |
910
+ | `.glass-list__subtitle` | Secondary text (small, muted, ellipsis) |
911
+ | `.glass-list__subtitle--wrap` | Multi-line subtitle (up to 3 lines, clamped with ellipsis) |
912
+ | `.glass-list__trailing` | Trailing slot — chevron, value, button, badge |
913
+ | `.glass-list__value` | Muted text inside `.glass-list__trailing` (e.g. file size) |
914
+
915
+ **Notes:**
916
+ - Dividers are auto-rendered via `::after`. The last item never has a divider.
917
+ - Items **with** a `__leading` slot get an icon-aligned divider inset; items **without** a leading slot get a standard left/right padding inset (handled via `:has()`). Large leading (`--lg`) adjusts the divider inset automatically.
918
+ - SVG icon convention: `24px` for leading (32px for `--lg`), `18px` for trailing, `stroke: currentColor`, `stroke-width: 2`.
919
+ - Use `<ul>` + `<li>` for semantic lists. For interactive rows wrap in `<a>` or `<button>` instead of `<li>` if a single-row list is needed.
920
+ - `.glass-list__section-header` sits **outside** the `.glass-list` container, directly above it.
921
+ - `--danger` and `--accent` affect the title and leading icon color; the subtitle stays muted.
922
+
923
+ ---
924
+
925
+ ### 3.25 Popover
926
+
927
+ Anchored dropdown / menu container. Wrap a trigger button and a `.glass-popover` inside a `.glass-popover-anchor`. Visibility is controlled via `.is-open` &mdash; toggling requires a tiny bit of JavaScript.
928
+
929
+ ```html
930
+ <div class="glass-popover-anchor">
931
+ <button class="glass-btn glass-btn--secondary glass-btn--auto"
932
+ onclick="gkTogglePopover(this, event)">
933
+ Open menu
934
+ </button>
935
+ <div class="glass-popover">
936
+ <ul class="glass-list glass-list--bare">
937
+ <li class="glass-list__item glass-list__item--interactive">
938
+ <span class="glass-list__leading">
939
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
940
+ <path d="M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8"/>
941
+ <polyline points="16 6 12 2 8 6"/>
942
+ <line x1="12" y1="2" x2="12" y2="15"/>
943
+ </svg>
944
+ </span>
945
+ <div class="glass-list__content"><div class="glass-list__title">Share</div></div>
946
+ </li>
947
+ <li class="glass-list__item glass-list__item--interactive">
948
+ <div class="glass-list__content"><div class="glass-list__title">Duplicate</div></div>
949
+ </li>
950
+ <li class="glass-list__item glass-list__item--interactive">
951
+ <div class="glass-list__content"><div class="glass-list__title">Delete</div></div>
952
+ </li>
953
+ </ul>
954
+ </div>
955
+ </div>
956
+
957
+ <script>
958
+ // ⚠️ Do NOT name this function `togglePopover` — it collides with the
959
+ // native HTMLElement.togglePopover() method from the HTML Popover API.
960
+ function gkTogglePopover(btn, e) {
961
+ const popover = btn.nextElementSibling;
962
+ const wasOpen = popover.classList.contains('is-open');
963
+ document.querySelectorAll('.glass-popover.is-open')
964
+ .forEach(p => p.classList.remove('is-open'));
965
+ if (!wasOpen) popover.classList.add('is-open');
966
+ if (e) e.stopPropagation();
967
+ }
968
+ document.addEventListener('click', e => {
969
+ if (!e.target.closest('.glass-popover-anchor')) {
970
+ document.querySelectorAll('.glass-popover.is-open')
971
+ .forEach(p => p.classList.remove('is-open'));
972
+ }
973
+ });
974
+ </script>
975
+ ```
976
+
977
+ | Class | Description |
978
+ |---|---|
979
+ | `.glass-popover-anchor` | Positioning context — wraps trigger + popover |
980
+ | `.glass-popover` | Floating glass surface, hidden until `.is-open` |
981
+ | `.glass-popover.is-open` | Visible state — fade + scale animation |
982
+ | `.glass-popover--top` | Opens upward (above the trigger) |
983
+ | `.glass-popover--start` | Aligns left edge with trigger |
984
+ | `.glass-popover--end` | Aligns right edge with trigger |
985
+
986
+ **Note:** name your toggle function anything except `togglePopover` &mdash; that name collides with the native `HTMLElement.togglePopover()` method (HTML Popover API) and inline `onclick` handlers will throw `NotSupportedError`. Use a prefix like `gkTogglePopover` or `myToggle`.
987
+
988
+ ---
989
+
990
+ ## 4. Utility Classes
991
+
992
+ ### Stack (Vertical)
993
+
994
+ Flexbox column with gap.
824
995
 
825
996
  ```html
826
997
  <div class="gl-stack gl-stack--md">
@@ -829,9 +1000,9 @@ Flexbox-Column mit Gap.
829
1000
  </div>
830
1001
  ```
831
1002
 
832
- | Klasse | Gap |
1003
+ | Class | Gap |
833
1004
  |---|---|
834
- | `.gl-stack` | Standard |
1005
+ | `.gl-stack` | Default |
835
1006
  | `.gl-stack--2xs` | 4px |
836
1007
  | `.gl-stack--xs` | 8px |
837
1008
  | `.gl-stack--sm` | 12px |
@@ -841,7 +1012,7 @@ Flexbox-Column mit Gap.
841
1012
 
842
1013
  ### Row (Horizontal)
843
1014
 
844
- Flexbox-Row mit Gap.
1015
+ Flexbox row with gap.
845
1016
 
846
1017
  ```html
847
1018
  <div class="gl-row gl-row--sm">
@@ -850,16 +1021,16 @@ Flexbox-Row mit Gap.
850
1021
  </div>
851
1022
  ```
852
1023
 
853
- | Klasse | Gap |
1024
+ | Class | Gap |
854
1025
  |---|---|
855
- | `.gl-row` | Standard |
1026
+ | `.gl-row` | Default |
856
1027
  | `.gl-row--xs` | 8px |
857
1028
  | `.gl-row--sm` | 12px |
858
1029
  | `.gl-row--md` | 16px |
859
1030
 
860
1031
  ### Margin
861
1032
 
862
- | Klasse | Wert |
1033
+ | Class | Value |
863
1034
  |---|---|
864
1035
  | `.gl-mt-sm` | margin-top: 12px |
865
1036
  | `.gl-mt-md` | margin-top: 16px |
@@ -872,38 +1043,38 @@ Flexbox-Row mit Gap.
872
1043
 
873
1044
  ### Text
874
1045
 
875
- | Klasse | Beschreibung |
1046
+ | Class | Description |
876
1047
  |---|---|
877
1048
  | `.gl-text-center` | text-align: center |
878
- | `.gl-text-muted` | Gedämpfte Textfarbe |
879
- | `.gl-text-sm` | Kleinere Schrift |
1049
+ | `.gl-text-muted` | Muted text color |
1050
+ | `.gl-text-sm` | Smaller font size |
880
1051
 
881
1052
  ### Layout
882
1053
 
883
- | Klasse | Beschreibung |
1054
+ | Class | Description |
884
1055
  |---|---|
885
- | `.gl-px` | Horizontales Padding |
1056
+ | `.gl-px` | Horizontal padding |
886
1057
  | `.gl-w-full` | width: 100% |
887
1058
  | `.gl-flex-1` | flex: 1 |
888
1059
 
889
1060
  ---
890
1061
 
891
- ## 5. State-Klassen Übersicht
1062
+ ## 5. State Classes Overview
892
1063
 
893
- | State-Klasse | Verwendet bei | Beschreibung |
1064
+ | State Class | Used on | Description |
894
1065
  |---|---|---|
895
- | `.is-active` | `.glass-modal-overlay`, `.glass-tab-bar__item` | Element ist aktiv/sichtbar |
896
- | `.is-open` | `.glass-accordion__item` | Accordion-Item ist ausgeklappt |
897
- | `.is-visible` | `.glass-toast` | Toast ist sichtbar |
898
- | `:checked` | Toggle, Checkbox, Radio (auf dem Input) | Nativer checked-State |
899
- | `:focus` | Input, Textarea, Select, Range | Focus-Ring |
900
- | `:disabled` | `.glass-input` | Deaktiviertes Input |
1066
+ | `.is-active` | `.glass-modal-overlay`, `.glass-tab-bar__item` | Element is active/visible |
1067
+ | `.is-open` | `.glass-accordion__item`, `.glass-popover` | Accordion item expanded / popover visible |
1068
+ | `.is-visible` | `.glass-toast` | Toast is visible |
1069
+ | `:checked` | Toggle, Checkbox, Radio (on the input) | Native checked state |
1070
+ | `:focus` | Input, Textarea, Select, Range | Focus ring |
1071
+ | `:disabled` | `.glass-input` | Disabled input |
901
1072
 
902
1073
  ---
903
1074
 
904
1075
  ## 6. Composition Patterns
905
1076
 
906
- ### Login-Screen
1077
+ ### Login Screen
907
1078
 
908
1079
  ```html
909
1080
  <div class="glass-bg">
@@ -917,27 +1088,27 @@ Flexbox-Row mit Gap.
917
1088
  </button>
918
1089
  </nav>
919
1090
 
920
- <h1 class="glass-title">Anmelden</h1>
1091
+ <h1 class="glass-title">Sign In</h1>
921
1092
 
922
1093
  <div class="gl-stack gl-stack--md">
923
1094
  <div class="glass-input-group">
924
- <label class="glass-label">E-Mail</label>
925
- <input class="glass-input" type="email" placeholder="name@beispiel.de">
1095
+ <label class="glass-label">Email</label>
1096
+ <input class="glass-input" type="email" placeholder="name@example.com">
926
1097
  </div>
927
1098
  <div class="glass-input-group">
928
- <label class="glass-label">Passwort</label>
1099
+ <label class="glass-label">Password</label>
929
1100
  <input class="glass-input" type="password" placeholder="••••••••">
930
1101
  </div>
931
1102
  </div>
932
1103
 
933
1104
  <div class="gl-stack gl-stack--sm gl-mt-lg">
934
- <button class="glass-btn glass-btn--primary">Einloggen</button>
935
- <button class="glass-btn glass-btn--tertiary">Passwort vergessen?</button>
1105
+ <button class="glass-btn glass-btn--primary">Log In</button>
1106
+ <button class="glass-btn glass-btn--tertiary">Forgot password?</button>
936
1107
  </div>
937
1108
  </div>
938
1109
  ```
939
1110
 
940
- ### Dashboard mit Cards
1111
+ ### Dashboard with Cards
941
1112
 
942
1113
  ```html
943
1114
  <div class="glass-bg glass-bg--has-tab-bar">
@@ -953,35 +1124,35 @@ Flexbox-Row mit Gap.
953
1124
  <div class="glass-card__icon">
954
1125
  <svg viewBox="0 0 64 64"><!-- Icon --></svg>
955
1126
  </div>
956
- <p class="glass-card__text">Dokumente erfassen und hochladen.</p>
1127
+ <p class="glass-card__text">Capture and upload documents.</p>
957
1128
  </div>
958
1129
 
959
1130
  <div class="glass-card glass-card--glow">
960
1131
  <div class="glass-card__icon">
961
1132
  <svg viewBox="0 0 64 64"><!-- Icon --></svg>
962
1133
  </div>
963
- <p class="glass-card__text">Verträge verwalten und archivieren.</p>
1134
+ <p class="glass-card__text">Manage and archive contracts.</p>
964
1135
  </div>
965
1136
  </div>
966
1137
 
967
1138
  <nav class="glass-tab-bar">
968
1139
  <button class="glass-tab-bar__item is-active">
969
1140
  <span class="glass-tab-bar__icon"><svg viewBox="0 0 24 24"><!-- Home --></svg></span>
970
- <span class="glass-tab-bar__label">Start</span>
1141
+ <span class="glass-tab-bar__label">Home</span>
971
1142
  </button>
972
1143
  <button class="glass-tab-bar__item">
973
1144
  <span class="glass-tab-bar__icon"><svg viewBox="0 0 24 24"><!-- Docs --></svg></span>
974
- <span class="glass-tab-bar__label">Verträge</span>
1145
+ <span class="glass-tab-bar__label">Contracts</span>
975
1146
  </button>
976
1147
  <button class="glass-tab-bar__item">
977
1148
  <span class="glass-tab-bar__icon"><svg viewBox="0 0 24 24"><!-- Profile --></svg></span>
978
- <span class="glass-tab-bar__label">Profil</span>
1149
+ <span class="glass-tab-bar__label">Profile</span>
979
1150
  </button>
980
1151
  </nav>
981
1152
  </div>
982
1153
  ```
983
1154
 
984
- ### Formular-Seite
1155
+ ### Form Page
985
1156
 
986
1157
  ```html
987
1158
  <div class="glass-bg">
@@ -991,63 +1162,63 @@ Flexbox-Row mit Gap.
991
1162
  </button>
992
1163
  </nav>
993
1164
 
994
- <h1 class="glass-title">Neuer Vertrag</h1>
1165
+ <h1 class="glass-title">New Contract</h1>
995
1166
 
996
1167
  <div class="gl-stack gl-stack--md">
997
1168
  <div class="glass-input-group">
998
- <label class="glass-label">Vertragsname</label>
999
- <input class="glass-input" type="text" placeholder="z.B. Mietvertrag">
1169
+ <label class="glass-label">Contract Name</label>
1170
+ <input class="glass-input" type="text" placeholder="e.g. Rental Agreement">
1000
1171
  </div>
1001
1172
 
1002
1173
  <div class="glass-input-group">
1003
- <label class="glass-label">Kategorie</label>
1174
+ <label class="glass-label">Category</label>
1004
1175
  <select class="glass-select">
1005
- <option>Bitte wählen…</option>
1006
- <option>Versicherung</option>
1007
- <option>Mietvertrag</option>
1008
- <option>Arbeitsvertrag</option>
1176
+ <option>Please select…</option>
1177
+ <option>Insurance</option>
1178
+ <option>Rental Agreement</option>
1179
+ <option>Employment Contract</option>
1009
1180
  </select>
1010
1181
  </div>
1011
1182
 
1012
1183
  <div class="glass-input-group">
1013
- <label class="glass-label">Anmerkungen</label>
1014
- <textarea class="glass-textarea" placeholder="Optionale Anmerkungen…"></textarea>
1184
+ <label class="glass-label">Notes</label>
1185
+ <textarea class="glass-textarea" placeholder="Optional notes…"></textarea>
1015
1186
  </div>
1016
1187
 
1017
1188
  <label class="glass-toggle">
1018
1189
  <input class="glass-toggle__input" type="checkbox">
1019
1190
  <span class="glass-toggle__track"><span class="glass-toggle__thumb"></span></span>
1020
- <span class="glass-toggle__label">Erinnerung aktivieren</span>
1191
+ <span class="glass-toggle__label">Enable reminder</span>
1021
1192
  </label>
1022
1193
 
1023
1194
  <hr class="glass-divider">
1024
1195
 
1025
- <button class="glass-btn glass-btn--primary">Speichern</button>
1026
- <button class="glass-btn glass-btn--tertiary">Abbrechen</button>
1196
+ <button class="glass-btn glass-btn--primary">Save</button>
1197
+ <button class="glass-btn glass-btn--tertiary">Cancel</button>
1027
1198
  </div>
1028
1199
  </div>
1029
1200
  ```
1030
1201
 
1031
- ### Lösch-Bestätigung (Modal)
1202
+ ### Delete Confirmation (Modal)
1032
1203
 
1033
1204
  ```html
1034
1205
  <div class="glass-modal-overlay is-active">
1035
1206
  <div class="glass-modal">
1036
1207
  <div class="glass-modal__header">
1037
- <h2 class="glass-modal__title">Vertrag löschen?</h2>
1208
+ <h2 class="glass-modal__title">Delete contract?</h2>
1038
1209
  </div>
1039
1210
  <div class="glass-modal__body">
1040
- <p>Möchtest du diesen Vertrag endgültig löschen? Dieser Vorgang kann nicht rückgängig gemacht werden.</p>
1211
+ <p>Do you want to permanently delete this contract? This action cannot be undone.</p>
1041
1212
  </div>
1042
1213
  <div class="glass-modal__footer">
1043
- <button class="glass-modal__action" onclick="closeModal()">Abbrechen</button>
1044
- <button class="glass-modal__action glass-modal__action--danger" onclick="deleteContract()">Löschen</button>
1214
+ <button class="glass-modal__action" onclick="closeModal()">Cancel</button>
1215
+ <button class="glass-modal__action glass-modal__action--danger" onclick="deleteContract()">Delete</button>
1045
1216
  </div>
1046
1217
  </div>
1047
1218
  </div>
1048
1219
  ```
1049
1220
 
1050
- ### Settings-Seite
1221
+ ### Settings Page
1051
1222
 
1052
1223
  ```html
1053
1224
  <div class="glass-bg">
@@ -1057,13 +1228,13 @@ Flexbox-Row mit Gap.
1057
1228
  </button>
1058
1229
  </nav>
1059
1230
 
1060
- <h1 class="glass-title">Einstellungen</h1>
1231
+ <h1 class="glass-title">Settings</h1>
1061
1232
 
1062
1233
  <div class="gl-stack gl-stack--md">
1063
1234
  <label class="glass-toggle">
1064
1235
  <input class="glass-toggle__input" type="checkbox" checked>
1065
1236
  <span class="glass-toggle__track"><span class="glass-toggle__thumb"></span></span>
1066
- <span class="glass-toggle__label">Push-Benachrichtigungen</span>
1237
+ <span class="glass-toggle__label">Push Notifications</span>
1067
1238
  </label>
1068
1239
 
1069
1240
  <hr class="glass-divider">
@@ -1071,14 +1242,14 @@ Flexbox-Row mit Gap.
1071
1242
  <label class="glass-toggle">
1072
1243
  <input class="glass-toggle__input" type="checkbox">
1073
1244
  <span class="glass-toggle__track"><span class="glass-toggle__thumb"></span></span>
1074
- <span class="glass-toggle__label">Dunkelmodus</span>
1245
+ <span class="glass-toggle__label">Dark Mode</span>
1075
1246
  </label>
1076
1247
 
1077
1248
  <hr class="glass-divider">
1078
1249
 
1079
1250
  <div class="glass-range-group">
1080
1251
  <div class="glass-range-header">
1081
- <label class="glass-label">Schriftgröße</label>
1252
+ <label class="glass-label">Font Size</label>
1082
1253
  <span class="glass-range-value">100%</span>
1083
1254
  </div>
1084
1255
  <input class="glass-range" type="range" min="80" max="150" value="100">
@@ -1089,14 +1260,14 @@ Flexbox-Row mit Gap.
1089
1260
  <div class="glass-accordion">
1090
1261
  <div class="glass-accordion__item">
1091
1262
  <button class="glass-accordion__trigger" onclick="this.parentElement.classList.toggle('is-open')">
1092
- <span>Erweiterte Einstellungen</span>
1263
+ <span>Advanced Settings</span>
1093
1264
  <span class="glass-accordion__trigger-icon">
1094
1265
  <svg viewBox="0 0 24 24"><polyline points="6 9 12 15 18 9"/></svg>
1095
1266
  </span>
1096
1267
  </button>
1097
1268
  <div class="glass-accordion__content">
1098
1269
  <div class="glass-accordion__body">
1099
- Erweiterte Optionen hier…
1270
+ Advanced options go here…
1100
1271
  </div>
1101
1272
  </div>
1102
1273
  </div>
@@ -1105,7 +1276,123 @@ Flexbox-Row mit Gap.
1105
1276
  </div>
1106
1277
  ```
1107
1278
 
1108
- ### Fortschritt + Toast
1279
+ ### iOS-style Settings Screen (List + Popover)
1280
+
1281
+ A grouped settings screen using `glass-list` for the rows and `glass-popover` for an inline action menu. Reproduces the layout of native iOS Settings screens.
1282
+
1283
+ ```html
1284
+ <div class="glass-bg">
1285
+ <nav class="glass-nav">
1286
+ <button class="glass-pill">
1287
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1288
+ <polyline points="15 18 9 12 15 6"/>
1289
+ </svg>
1290
+ </button>
1291
+ <h1 class="glass-title">Settings</h1>
1292
+
1293
+ <!-- Inline action menu (popover) -->
1294
+ <div class="glass-popover-anchor">
1295
+ <button class="glass-pill" onclick="gkTogglePopover(this, event)" aria-label="More">
1296
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1297
+ <circle cx="12" cy="5" r="1.5" fill="currentColor"/>
1298
+ <circle cx="12" cy="12" r="1.5" fill="currentColor"/>
1299
+ <circle cx="12" cy="19" r="1.5" fill="currentColor"/>
1300
+ </svg>
1301
+ </button>
1302
+ <div class="glass-popover glass-popover--end">
1303
+ <ul class="glass-list glass-list--bare">
1304
+ <li class="glass-list__item glass-list__item--interactive">
1305
+ <div class="glass-list__content"><div class="glass-list__title">Edit profile</div></div>
1306
+ </li>
1307
+ <li class="glass-list__item glass-list__item--interactive">
1308
+ <div class="glass-list__content"><div class="glass-list__title">Sign out</div></div>
1309
+ </li>
1310
+ </ul>
1311
+ </div>
1312
+ </div>
1313
+ </nav>
1314
+
1315
+ <!-- Account section -->
1316
+ <div class="glass-list__section-header">Account</div>
1317
+ <ul class="glass-list gl-mb-lg">
1318
+ <li class="glass-list__item glass-list__item--interactive">
1319
+ <span class="glass-list__leading">
1320
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1321
+ <path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/>
1322
+ <circle cx="12" cy="7" r="4"/>
1323
+ </svg>
1324
+ </span>
1325
+ <div class="glass-list__content">
1326
+ <div class="glass-list__title">Marcel Jungherz</div>
1327
+ <div class="glass-list__subtitle">marcel@jungherz.com</div>
1328
+ </div>
1329
+ <div class="glass-list__trailing">
1330
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1331
+ <polyline points="9 18 15 12 9 6"/>
1332
+ </svg>
1333
+ </div>
1334
+ </li>
1335
+ <li class="glass-list__item glass-list__item--interactive">
1336
+ <span class="glass-list__leading">
1337
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1338
+ <rect x="2" y="5" width="20" height="14" rx="2"/>
1339
+ <line x1="2" y1="10" x2="22" y2="10"/>
1340
+ </svg>
1341
+ </span>
1342
+ <div class="glass-list__content">
1343
+ <div class="glass-list__title">Subscriptions</div>
1344
+ </div>
1345
+ <div class="glass-list__trailing">
1346
+ $34.94
1347
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1348
+ <polyline points="9 18 15 12 9 6"/>
1349
+ </svg>
1350
+ </div>
1351
+ </li>
1352
+ </ul>
1353
+
1354
+ <!-- Notifications section -->
1355
+ <div class="glass-list__section-header">Notifications</div>
1356
+ <ul class="glass-list gl-mb-lg">
1357
+ <li class="glass-list__item glass-list__item--interactive">
1358
+ <span class="glass-list__leading">
1359
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1360
+ <path d="M18 8a6 6 0 1 0-12 0c0 7-3 9-3 9h18s-3-2-3-9"/>
1361
+ <path d="M13.73 21a2 2 0 0 1-3.46 0"/>
1362
+ </svg>
1363
+ </span>
1364
+ <div class="glass-list__content"><div class="glass-list__title">Push notifications</div></div>
1365
+ <div class="glass-list__trailing">On</div>
1366
+ </li>
1367
+ <li class="glass-list__item glass-list__item--interactive">
1368
+ <span class="glass-list__leading">
1369
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
1370
+ <path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/>
1371
+ <polyline points="22 6 12 13 2 6"/>
1372
+ </svg>
1373
+ </span>
1374
+ <div class="glass-list__content"><div class="glass-list__title">Email digest</div></div>
1375
+ <div class="glass-list__trailing">Weekly</div>
1376
+ </li>
1377
+ <li class="glass-list__item glass-list__item--center glass-list__item--interactive">
1378
+ Reset to defaults
1379
+ </li>
1380
+ </ul>
1381
+ </div>
1382
+ ```
1383
+
1384
+ Key points in this composition:
1385
+
1386
+ - **Two grouped sections** — labeled by `.glass-list__section-header` above each list, matching iOS settings.
1387
+ - **Auto-dividers** — no `<hr>` between rows; the `::after` pseudo-element handles them.
1388
+ - **Mixed trailing types** — chevron, value text, value + chevron, all in the same list.
1389
+ - **Centered destructive action** — last item uses `--center` for a "Reset to defaults" style row, gets a full-width divider above (no leading icon → standard padding inset).
1390
+ - **Popover in nav** — `glass-popover--end` aligns the menu to the right edge of the trigger so it doesn't overflow the viewport.
1391
+ - **Bare list inside popover** — `glass-list--bare` strips the inner glass surface so the popover stays the only glass layer.
1392
+
1393
+ ---
1394
+
1395
+ ### Progress + Toast
1109
1396
 
1110
1397
  ```html
1111
1398
  <!-- Progress -->
@@ -1119,55 +1406,62 @@ Flexbox-Row mit Gap.
1119
1406
  </div>
1120
1407
  </div>
1121
1408
 
1122
- <!-- Toast (wird per JS eingeblendet) -->
1409
+ <!-- Toast (shown via JS) -->
1123
1410
  <div class="glass-toast glass-toast--success is-visible">
1124
1411
  <svg class="glass-toast__icon" viewBox="0 0 24 24">
1125
1412
  <polyline points="20 6 9 17 4 12"/>
1126
1413
  </svg>
1127
- <span class="glass-toast__text">Upload erfolgreich!</span>
1414
+ <span class="glass-toast__text">Upload successful!</span>
1128
1415
  </div>
1129
1416
  ```
1130
1417
 
1131
1418
  ---
1132
1419
 
1133
- ## 7. Regeln & häufige Fehler
1420
+ ## 7. Rules & Common Mistakes
1134
1421
 
1135
- ### ✅ Immer beachten
1422
+ ### ✅ Always follow
1136
1423
 
1137
- 1. **`glass-bg` als äußerster Container** – Ohne den Background-Wrapper fehlt der Aurora-Hintergrund, und Glaseffekte sehen nicht korrekt aus.
1138
- 2. **`glass-bg--has-tab-bar`** – Wenn eine Tab-Bar vorhanden ist, muss dieser Modifier auf `glass-bg` gesetzt werden, sonst verdeckt die Tab-Bar den unteren Inhalt.
1139
- 3. **Buttons sind full-width** – `glass-btn` hat `width: 100%`. Für inline-Buttons immer `glass-btn--auto` ergänzen.
1140
- 4. **Inputs in `glass-input-group` wrappen** – Für korrektes Label/Hint-Spacing.
1141
- 5. **State-Klassen richtig platzieren:**
1142
- - `is-active` → auf `.glass-modal-overlay` (nicht auf `.glass-modal`)
1143
- - `is-active` → auf `.glass-tab-bar__item`
1144
- - `is-open` → auf `.glass-accordion__item`
1145
- - `is-visible` → auf `.glass-toast`
1146
- 6. **SVG-Icons** – GlassKit nutzt inline SVGs (stroke-based, nicht fill). Typische Attribute: `viewBox="0 0 24 24"`, stroke via `currentColor`.
1147
- 7. **`data-theme`** – Immer auf `<html>` setzen, nie auf `<body>` oder tiefere Elemente.
1424
+ 1. **`glass-bg` as outermost container** – Without the background wrapper, the aurora background is missing and glass effects won't render correctly.
1425
+ 2. **`glass-bg--has-tab-bar`** – When a tab bar is present, this modifier must be set on `glass-bg`, otherwise the tab bar covers the bottom content.
1426
+ 3. **Buttons are full-width** – `glass-btn` has `width: 100%`. Always add `glass-btn--auto` for inline buttons.
1427
+ 4. **Wrap inputs in `glass-input-group`** – For correct label/hint spacing.
1428
+ 5. **Place state classes correctly:**
1429
+ - `is-active` → on `.glass-modal-overlay` (not on `.glass-modal`)
1430
+ - `is-active` → on `.glass-tab-bar__item`
1431
+ - `is-open` → on `.glass-accordion__item`
1432
+ - `is-open` → on `.glass-popover` (not on the trigger or anchor)
1433
+ - `is-visible` → on `.glass-toast`
1434
+ 6. **SVG icons** – GlassKit uses inline SVGs (stroke-based, not fill). Typical attributes: `viewBox="0 0 24 24"`, stroke via `currentColor`.
1435
+ 7. **`data-theme`** – Always set on `<html>`, never on `<body>` or deeper elements.
1436
+ 8. **List dividers are automatic** – Never add a `<hr>` or divider element between `.glass-list__item`s. The divider is rendered via `::after` and respects `:has(.glass-list__leading)` for the inset.
1437
+ 9. **Popover toggle naming** – Never name your popover toggle JS function `togglePopover`. It collides with the native `HTMLElement.togglePopover()` method. Use a prefix like `gkTogglePopover`.
1148
1438
 
1149
- ### ❌ Häufige Fehler
1439
+ ### ❌ Common Mistakes
1150
1440
 
1151
- | Fehler | Korrektur |
1441
+ | Mistake | Correction |
1152
1442
  |---|---|
1153
- | `is-active` auf `.glass-modal` statt `.glass-modal-overlay` | `is-active` auf den Overlay setzen |
1154
- | `glass-btn` ohne Variante (`--primary` etc.) | Immer eine Variante angeben |
1155
- | Inputs ohne `glass-input-group` Wrapper | In `glass-input-group` einbetten |
1156
- | `glass-tab-bar` ohne `glass-bg--has-tab-bar` | Modifier auf den Background-Container |
1157
- | `data-theme` auf `<body>` | Auf `<html>` setzen |
1158
- | Progress-Breite per Klasse statt inline-Style | `style="width: X%"` auf `.glass-progress__fill` |
1159
- | Toggle ohne `__track > __thumb` Verschachtelung | Korrekte BEM-Hierarchie beachten |
1443
+ | `is-active` on `.glass-modal` instead of `.glass-modal-overlay` | Set `is-active` on the overlay |
1444
+ | `glass-btn` without variant (`--primary` etc.) | Always specify a variant |
1445
+ | Inputs without `glass-input-group` wrapper | Wrap in `glass-input-group` |
1446
+ | `glass-tab-bar` without `glass-bg--has-tab-bar` | Add modifier to the background container |
1447
+ | `data-theme` on `<body>` | Set on `<html>` |
1448
+ | Progress width via class instead of inline style | Use `style="width: X%"` on `.glass-progress__fill` |
1449
+ | Toggle without `__track > __thumb` nesting | Follow correct BEM hierarchy |
1450
+ | Manually adding `<hr>` or divider element between `.glass-list__item`s | Remove it — dividers are automatic via `::after` |
1451
+ | Putting `glass-list` inside `glass-popover` without `--bare` | Add `.glass-list--bare` to strip the double glass surface |
1452
+ | JS function named `togglePopover()` | Rename to `gkTogglePopover()` or similar to avoid native API clash |
1453
+ | Putting `.is-open` on the trigger button instead of `.glass-popover` | The state class belongs on the popover element |
1160
1454
 
1161
1455
  ---
1162
1456
 
1163
- ## 8. Klassen-Schnellreferenz
1457
+ ## 8. Quick Class Reference
1164
1458
 
1165
- | Komponente | Basis-Klasse | Modifier / States |
1459
+ | Component | Base Class | Modifiers / States |
1166
1460
  |---|---|---|
1167
1461
  | Background | `.glass-bg` | `--has-tab-bar` |
1168
1462
  | Navigation | `.glass-nav` | – |
1169
- | Pill-Button | `.glass-pill` | – |
1170
- | Theme-Toggle | `.glass-theme-toggle` | – |
1463
+ | Pill Button | `.glass-pill` | – |
1464
+ | Theme Toggle | `.glass-theme-toggle` | – |
1171
1465
  | Title | `.glass-title` | – |
1172
1466
  | Card | `.glass-card` | `--glow` |
1173
1467
  | Button | `.glass-btn` | `--primary`, `--secondary`, `--tertiary`, `--sm`, `--lg`, `--auto` |
@@ -1189,14 +1483,16 @@ Flexbox-Row mit Gap.
1189
1483
  | Progress | `.glass-progress` | `--sm`, `--lg`, `--success`, `--error` |
1190
1484
  | Modal | `.glass-modal-overlay` | `.is-active` |
1191
1485
  | Toast | `.glass-toast` | `--success`, `--error`, `--warning`, `.is-visible` |
1192
- | Tab-Bar | `.glass-tab-bar` | `.is-active` auf Items |
1193
- | Accordion | `.glass-accordion` | `.is-open` auf Items |
1486
+ | Tab Bar | `.glass-tab-bar` | `.is-active` on items |
1487
+ | Accordion | `.glass-accordion` | `.is-open` on items |
1488
+ | List | `.glass-list` | `--flush`, `--bare`, `__item--interactive`, `__item--center`, `__item--danger`, `__item--accent`, `__leading--lg`, `__subtitle--wrap`, `__value`, `__section-header` |
1489
+ | Popover | `.glass-popover` | `--top`, `--start`, `--end`, `.is-open` |
1194
1490
 
1195
1491
  ---
1196
1492
 
1197
1493
  ## 9. Web Components / Shadow DOM
1198
1494
 
1199
- GlassKit liefert ein Constructable Stylesheet für Shadow DOM-Nutzung:
1495
+ GlassKit ships a Constructable Stylesheet for Shadow DOM usage:
1200
1496
 
1201
1497
  ```js
1202
1498
  import { glassSheet } from '@jungherz-de/glasskit/glasskit-styles.js';
@@ -1216,18 +1512,18 @@ class MyCard extends HTMLElement {
1216
1512
  customElements.define('my-card', MyCard);
1217
1513
  ```
1218
1514
 
1219
- | Export | Typ | Beschreibung |
1515
+ | Export | Type | Description |
1220
1516
  |---|---|---|
1221
- | `glassSheet` | `CSSStyleSheet` | Constructable Stylesheet für `adoptedStyleSheets` |
1222
- | `css` | `string` | CSS als String (Fallback) |
1517
+ | `glassSheet` | `CSSStyleSheet` | Constructable Stylesheet for `adoptedStyleSheets` |
1518
+ | `css` | `string` | CSS as string (fallback) |
1223
1519
 
1224
- **Hinweis:** CSS Custom Properties (`--gl-*`) durchdringen die Shadow-Boundary automatisch. Theme-Switching funktioniert global.
1520
+ **Note:** CSS Custom Properties (`--gl-*`) penetrate the shadow boundary automatically. Theme switching works globally.
1225
1521
 
1226
1522
  ---
1227
1523
 
1228
1524
  ## 10. Custom Theming
1229
1525
 
1230
- Eigene Markenfarben über `theme-override.css` nach der Basis-Library laden:
1526
+ Load custom brand colors via `theme-override.css` after the base library:
1231
1527
 
1232
1528
  ```css
1233
1529
  :root {
@@ -1244,8 +1540,8 @@ Eigene Markenfarben über `theme-override.css` nach der Basis-Library laden:
1244
1540
  }
1245
1541
  ```
1246
1542
 
1247
- Mitgelieferte Theme-Vorlagen in `theme-override.css`:
1543
+ Included theme templates in `theme-override.css`:
1248
1544
  - 🔵 Ocean Blue
1249
1545
  - 🟢 Emerald Green
1250
1546
  - 🌹 Rose
1251
- - 🎨 Custom (leer, zum Befüllen)
1547
+ - 🎨 Custom (empty, ready to fill)