@jungherz-de/glasskit 1.3.1 → 1.3.3
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/CHANGELOG.md +117 -85
- package/README.md +170 -169
- package/glasskit-styles.js +1 -1
- package/glasskit.css +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,13 +7,45 @@ GlassKit uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## [1.3.3] – 2026-03-21
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Language switcher** in `index.html` and `docs.html` (and their German counterparts in `de/`) – toggle between English and German versions via a pill button in the header/toolbar
|
|
15
|
+
- **German translations** (`de/` directory) – full German versions of `index.html`, `docs.html`, and `showcase.html` with correct relative asset paths
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- **Full English translation** of `README.md`, `CHANGELOG.md`, `index.html`, `docs.html`, and `showcase.html` – all user-facing text, labels, placeholders, code comments, and demo content
|
|
20
|
+
- README screenshot now links to [glasskit.jungherz.com](https://glasskit.jungherz.com)
|
|
21
|
+
- Version references updated to 1.3.3 across all files
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## [1.3.2] – 2026-03-21
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
|
|
29
|
+
- **Background Switcher** in `showcase.html` – interactive background picker with 6 color presets (Default, Ocean, Sunset, Forest, Rose, Monochrome) to test glassmorphism effects on different backgrounds
|
|
30
|
+
- Each preset has its own color values for Dark and Light Mode
|
|
31
|
+
- Pure CSS gradients, no external images
|
|
32
|
+
- Popover UI with animated color swatches, consistent with GlassKit styling
|
|
33
|
+
- Overrides only Custom Properties via `data-bg` attribute – no changes to `glasskit.css`
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
|
|
37
|
+
- Footer in `index.html` updated: "Built by Jungherz with 🧊 and lots of ❤️ for detail."
|
|
38
|
+
- Version references updated to 1.3.2 across all files (`package.json`, `glasskit.css`, `README.md`, `index.html`, `showcase.html`)
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
10
42
|
## [1.3.1] – 2026-03-21
|
|
11
43
|
|
|
12
44
|
### Fixed
|
|
13
45
|
|
|
14
|
-
- Intro
|
|
15
|
-
- README
|
|
16
|
-
- Release
|
|
46
|
+
- Intro screenshot: PNG replaced with optimized JPEG (1.3 MB → 287 KB)
|
|
47
|
+
- README image: absolute GitHub URL for correct display on npmjs.com
|
|
48
|
+
- Release pipeline: tag push now automatically triggers Release + Build + npm Publish (no manual release needed)
|
|
17
49
|
|
|
18
50
|
---
|
|
19
51
|
|
|
@@ -21,43 +53,42 @@ GlassKit uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
21
53
|
|
|
22
54
|
### 🎉 Initial Public Release
|
|
23
55
|
|
|
24
|
-
GlassKit
|
|
25
|
-
Jungherz GmbH)
|
|
26
|
-
|
|
27
|
-
erste öffentliche Veröffentlichung als Open-Source-Projekt.
|
|
56
|
+
GlassKit originated from a real client project (MeineFinanzCloud /
|
|
57
|
+
Jungherz GmbH) and evolved into a complete, reusable component library
|
|
58
|
+
during development. Version 1.3 is the first public open-source release.
|
|
28
59
|
|
|
29
60
|
---
|
|
30
61
|
|
|
31
62
|
### Added
|
|
32
63
|
|
|
33
|
-
####
|
|
34
|
-
- **Design Tokens** –
|
|
64
|
+
#### Core Library (`glasskit.css`)
|
|
65
|
+
- **Design Tokens** – complete system of CSS Custom Properties
|
|
35
66
|
(`--gl-color-*`, `--gl-surface-*`, `--gl-border-*`, `--gl-blur-*`,
|
|
36
67
|
`--gl-radius-*`, `--gl-shadow-*`, `--gl-space-*`, `--gl-font-*`)
|
|
37
|
-
- **Scoped Reset** – `box-sizing: border-box`
|
|
38
|
-
|
|
39
|
-
- **Dark Mode** (
|
|
40
|
-
- **Light Mode** via `[data-theme="light"]` –
|
|
68
|
+
- **Scoped Reset** – `box-sizing: border-box` for all `[class*="glass-"]`
|
|
69
|
+
elements, prevents layout conflicts with existing projects
|
|
70
|
+
- **Dark Mode** (default) via `:root` / `[data-theme="dark"]`
|
|
71
|
+
- **Light Mode** via `[data-theme="light"]` – fully separate token values
|
|
41
72
|
|
|
42
|
-
####
|
|
73
|
+
#### Components (22 total)
|
|
43
74
|
|
|
44
|
-
| # |
|
|
75
|
+
| # | Component | Class |
|
|
45
76
|
|---|---|---|
|
|
46
|
-
| 1 |
|
|
77
|
+
| 1 | Background | `.glass-bg` |
|
|
47
78
|
| 2 | Navigation Bar | `.glass-nav` |
|
|
48
|
-
| 3 | Pill
|
|
49
|
-
| 4 | Tab
|
|
50
|
-
| 5 |
|
|
79
|
+
| 3 | Pill Button | `.glass-pill` |
|
|
80
|
+
| 4 | Tab Bar | `.glass-tab-bar` |
|
|
81
|
+
| 5 | Page Title | `.glass-title` |
|
|
51
82
|
| 6 | Card | `.glass-card` |
|
|
52
83
|
| 7 | Button | `.glass-btn` |
|
|
53
84
|
| 8 | Badge | `.glass-badge` |
|
|
54
85
|
| 9 | Avatar | `.glass-avatar` |
|
|
55
86
|
| 10 | Divider | `.glass-divider` |
|
|
56
|
-
| 11 | Status
|
|
87
|
+
| 11 | Status Notice | `.glass-status` |
|
|
57
88
|
| 12 | Input | `.glass-input` |
|
|
58
89
|
| 13 | Textarea | `.glass-textarea` |
|
|
59
90
|
| 14 | Select | `.glass-select` |
|
|
60
|
-
| 15 |
|
|
91
|
+
| 15 | Search | `.glass-search` |
|
|
61
92
|
| 16 | Toggle Switch | `.glass-toggle` |
|
|
62
93
|
| 17 | Checkbox | `.glass-checkbox` |
|
|
63
94
|
| 18 | Radio Button | `.glass-radio` |
|
|
@@ -66,80 +97,79 @@ erste öffentliche Veröffentlichung als Open-Source-Projekt.
|
|
|
66
97
|
| 21 | Modal | `.glass-modal` |
|
|
67
98
|
| 22 | Toast | `.glass-toast` |
|
|
68
99
|
|
|
69
|
-
####
|
|
70
|
-
- Button
|
|
71
|
-
- Card
|
|
72
|
-
- Progress
|
|
73
|
-
- Badge
|
|
74
|
-
- Avatar
|
|
75
|
-
- Toast
|
|
76
|
-
- Modal
|
|
77
|
-
-
|
|
78
|
-
|
|
79
|
-
#### Utility
|
|
80
|
-
- Layout: `.gl-stack`, `.gl-row` (
|
|
100
|
+
#### Modifiers & States
|
|
101
|
+
- Button variants: `--primary`, `--secondary`, `--tertiary`, `--sm`, `--lg`, `--auto`
|
|
102
|
+
- Card variant: `--glow` (light-to-milky gradient with light streak)
|
|
103
|
+
- Progress variants: `--sm`, `--lg`, `--success`, `--error`
|
|
104
|
+
- Badge variants: `--primary`, `--success`, `--error`
|
|
105
|
+
- Avatar sizes: `--sm`, `--lg`
|
|
106
|
+
- Toast variants: `--success`, `--error`, `--warning`
|
|
107
|
+
- Modal actions: `--primary`, `--danger`
|
|
108
|
+
- Interactive states: `.is-active`, `.is-open`, `.is-visible`
|
|
109
|
+
|
|
110
|
+
#### Utility Classes
|
|
111
|
+
- Layout: `.gl-stack`, `.gl-row` (each with gap variants `--xs` to `--xl`)
|
|
81
112
|
- Spacing: `.gl-mt-*`, `.gl-mb-*`, `.gl-px`
|
|
82
113
|
- Text: `.gl-text-center`, `.gl-text-muted`, `.gl-text-sm`
|
|
83
|
-
-
|
|
114
|
+
- Other: `.gl-w-full`, `.gl-flex-1`
|
|
84
115
|
|
|
85
|
-
####
|
|
86
|
-
- `glasskit.css` –
|
|
87
|
-
- `glasskit.min.css` –
|
|
88
|
-
- `glasskit-styles.js` – Constructable Stylesheet
|
|
89
|
-
- `theme-override.css` – Template
|
|
116
|
+
#### Files
|
|
117
|
+
- `glasskit.css` – Core library
|
|
118
|
+
- `glasskit.min.css` – Minified version (auto-generated on release)
|
|
119
|
+
- `glasskit-styles.js` – Constructable Stylesheet for Shadow DOM (auto-generated)
|
|
120
|
+
- `theme-override.css` – Template for custom themes (4 example themes:
|
|
90
121
|
Ocean Blue, Emerald Green, Rose, Custom)
|
|
91
|
-
- `build-styles-js.mjs` – Build
|
|
92
|
-
- `package.json` – npm
|
|
93
|
-
- `index.html` –
|
|
94
|
-
- `showcase.html` –
|
|
95
|
-
- `docs.html` –
|
|
96
|
-
|
|
97
|
-
- `README.md` –
|
|
98
|
-
- `CHANGELOG.md` –
|
|
122
|
+
- `build-styles-js.mjs` – Build script for glasskit-styles.js
|
|
123
|
+
- `package.json` – npm package definition
|
|
124
|
+
- `index.html` – Landing page with iPhone wireframe & embedded showcase
|
|
125
|
+
- `showcase.html` – Interactive showcase of all 22 components
|
|
126
|
+
- `docs.html` – Full documentation with live previews,
|
|
127
|
+
code blocks, and class tables
|
|
128
|
+
- `README.md` – Project documentation
|
|
129
|
+
- `CHANGELOG.md` – This file
|
|
99
130
|
- `LICENSE` – MIT License
|
|
100
131
|
|
|
101
132
|
#### Build & Distribution
|
|
102
|
-
- **GitHub Actions Release Pipeline** –
|
|
103
|
-
Constructable Stylesheet
|
|
104
|
-
|
|
105
|
-
- **npm
|
|
106
|
-
- **CDN
|
|
107
|
-
- **Shadow
|
|
108
|
-
Constructable Stylesheet
|
|
133
|
+
- **GitHub Actions Release Pipeline** – automatic minification,
|
|
134
|
+
Constructable Stylesheet generation, and npm publishing on
|
|
135
|
+
every GitHub Release
|
|
136
|
+
- **npm package** `@jungherz-de/glasskit` – installable via npm, yarn, pnpm
|
|
137
|
+
- **CDN availability** – immediately available via jsDelivr and unpkg
|
|
138
|
+
- **Shadow DOM support** – `glasskit-styles.js` exports a ready-made
|
|
139
|
+
Constructable Stylesheet for Web Components (Vanilla, Hybrids, Lit, etc.)
|
|
109
140
|
|
|
110
141
|
---
|
|
111
142
|
|
|
112
143
|
### Fixed
|
|
113
144
|
|
|
114
|
-
- `box-sizing: border-box`
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
`transform: translateZ(0)` auf `.phone-frame`
|
|
145
|
+
- `box-sizing: border-box` was missing on `.glass-input` and `.glass-textarea`,
|
|
146
|
+
which caused fields to extend beyond the screen edge in certain projects
|
|
147
|
+
→ resolved globally via Scoped Reset
|
|
148
|
+
- Search icon (`.glass-search__icon`) was not visible in some browsers
|
|
149
|
+
→ added `!important` on `stroke`, `fill`, `stroke-width` and `z-index: 2`
|
|
150
|
+
- Button icons were missing in the showcase → SVGs re-added to all buttons,
|
|
151
|
+
icon colors consistently controlled via `--gl-icon-*` tokens
|
|
152
|
+
- Modal and Toast were placed outside `.glass-bg` and therefore did not inherit
|
|
153
|
+
`font-family` → `font-family: var(--gl-font-family)` set directly on
|
|
154
|
+
`.glass-modal-overlay` and `.glass-toast`
|
|
155
|
+
- iPhone frame: iframe content was showing through rounded corners on scroll
|
|
156
|
+
→ fixed via `isolation: isolate`, `-webkit-mask-image`, and
|
|
157
|
+
`transform: translateZ(0)` on `.phone-frame`
|
|
128
158
|
|
|
129
159
|
---
|
|
130
160
|
|
|
131
161
|
### Design Decisions
|
|
132
162
|
|
|
133
|
-
- **Glassmorphism
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
- **
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
- **BEM-
|
|
140
|
-
|
|
141
|
-
- **Token-
|
|
142
|
-
|
|
163
|
+
- **Glassmorphism inspired by iOS 26 Liquid Glass** – Apple fundamentally
|
|
164
|
+
redefined glass design with iOS 26. GlassKit translates this look
|
|
165
|
+
into pure CSS for web and apps.
|
|
166
|
+
- **No JavaScript dependencies** – All animations and transitions
|
|
167
|
+
run purely via CSS Transitions. Only Modal, Toast, and Accordion require
|
|
168
|
+
minimal `classList.toggle()` without any framework.
|
|
169
|
+
- **BEM-like naming convention** – `glass-*` prefix prevents conflicts
|
|
170
|
+
with existing CSS in the target project.
|
|
171
|
+
- **Token-first** – Every visual value is a token. Theming requires
|
|
172
|
+
no changes to the core library.
|
|
143
173
|
|
|
144
174
|
---
|
|
145
175
|
|
|
@@ -148,21 +178,23 @@ erste öffentliche Veröffentlichung als Open-Source-Projekt.
|
|
|
148
178
|
- Repository: [github.com/JUNGHERZ/GlassKit](https://github.com/JUNGHERZ/GlassKit)
|
|
149
179
|
- npm: [@jungherz-de/glasskit](https://www.npmjs.com/package/@jungherz-de/glasskit)
|
|
150
180
|
- CDN: [cdn.jsdelivr.net/npm/@jungherz-de/glasskit](https://cdn.jsdelivr.net/npm/@jungherz-de/glasskit/)
|
|
151
|
-
-
|
|
152
|
-
-
|
|
181
|
+
- License: MIT
|
|
182
|
+
- Developed by: [Jungherz GmbH](https://www.jungherz.com)
|
|
153
183
|
|
|
154
184
|
---
|
|
155
185
|
|
|
156
186
|
## [Unreleased]
|
|
157
187
|
|
|
158
|
-
>
|
|
188
|
+
> Planned additions for future versions:
|
|
159
189
|
|
|
160
|
-
- [ ]
|
|
161
|
-
- [ ]
|
|
162
|
-
- [ ] Figma
|
|
190
|
+
- [ ] Additional themes (Purple, Midnight, Sand)
|
|
191
|
+
- [ ] Animated backgrounds (Aurora Motion)
|
|
192
|
+
- [ ] Figma component set
|
|
163
193
|
|
|
164
194
|
---
|
|
165
195
|
|
|
196
|
+
[1.3.3]: https://github.com/JUNGHERZ/GlassKit/releases/tag/v1.3.3
|
|
197
|
+
[1.3.2]: https://github.com/JUNGHERZ/GlassKit/releases/tag/v1.3.2
|
|
166
198
|
[1.3.1]: https://github.com/JUNGHERZ/GlassKit/releases/tag/v1.3.1
|
|
167
199
|
[1.3.0]: https://github.com/JUNGHERZ/GlassKit/releases/tag/v1.3.0
|
|
168
|
-
[Unreleased]: https://github.com/JUNGHERZ/GlassKit/compare/v1.3.
|
|
200
|
+
[Unreleased]: https://github.com/JUNGHERZ/GlassKit/compare/v1.3.3...HEAD
|
package/README.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="https://img.shields.io/badge/version-1.3-orange?style=flat-square" alt="Version">
|
|
2
|
+
<img src="https://img.shields.io/badge/version-1.3.3-orange?style=flat-square" alt="Version">
|
|
3
3
|
<img src="https://img.shields.io/badge/CSS-only-blue?style=flat-square" alt="CSS only">
|
|
4
4
|
<img src="https://img.shields.io/badge/components-22-green?style=flat-square" alt="Components">
|
|
5
5
|
<img src="https://img.shields.io/badge/license-MIT-lightgrey?style=flat-square" alt="License">
|
|
6
|
-
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/changelog-v1.3.
|
|
6
|
+
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/changelog-v1.3.3-f5a623?style=flat-square" alt="Changelog"></a>
|
|
7
7
|
<a href="https://www.npmjs.com/package/@jungherz-de/glasskit"><img src="https://img.shields.io/npm/v/@jungherz-de/glasskit?style=flat-square&color=cb3837&label=npm" alt="npm"></a>
|
|
8
8
|
<a href="https://cdn.jsdelivr.net/npm/@jungherz-de/glasskit/"><img src="https://img.shields.io/badge/CDN-jsDelivr-blue?style=flat-square" alt="jsDelivr"></a>
|
|
9
9
|
</p>
|
|
@@ -11,72 +11,72 @@
|
|
|
11
11
|
<h1 align="center">🧊 GlassKit</h1>
|
|
12
12
|
|
|
13
13
|
<p align="center">
|
|
14
|
-
<img src="https://raw.githubusercontent.com/JUNGHERZ/GlassKit/main/intro_screenshot.jpg" alt="GlassKit Preview" width="720">
|
|
14
|
+
<a href="https://glasskit.jungherz.com"><img src="https://raw.githubusercontent.com/JUNGHERZ/GlassKit/main/intro_screenshot.jpg" alt="GlassKit Preview" width="720"></a>
|
|
15
15
|
</p>
|
|
16
16
|
|
|
17
17
|
<p align="center">
|
|
18
18
|
<strong>A modern glassmorphism CSS component library.</strong><br>
|
|
19
|
-
22
|
|
19
|
+
22 Components · Dark & Light Mode · No Dependencies · Design Tokens
|
|
20
20
|
</p>
|
|
21
21
|
|
|
22
22
|
<p align="center">
|
|
23
23
|
<a href="#-installation">Installation</a> ·
|
|
24
24
|
<a href="#-quick-start">Quick Start</a> ·
|
|
25
|
-
<a href="#-
|
|
25
|
+
<a href="#-components">Components</a> ·
|
|
26
26
|
<a href="#-theming">Theming</a> ·
|
|
27
27
|
<a href="#-web-components--shadow-dom">Web Components</a> ·
|
|
28
|
-
<a href="#-
|
|
28
|
+
<a href="#-documentation">Docs</a> ·
|
|
29
29
|
<a href="CHANGELOG.md">Changelog</a> ·
|
|
30
|
-
<a href="#-
|
|
30
|
+
<a href="#-license">License</a>
|
|
31
31
|
</p>
|
|
32
32
|
|
|
33
33
|
---
|
|
34
34
|
|
|
35
|
-
## ✨
|
|
35
|
+
## ✨ What is GlassKit?
|
|
36
36
|
|
|
37
|
-
GlassKit
|
|
37
|
+
GlassKit is a complete **CSS component library** with glassmorphism aesthetics – inspired by **iOS 26 Liquid Glass** and visionOS. Apple fundamentally redefined glass design with iOS 26: deeper blur effects, luminous borders, and dynamic light reflections on surfaces. GlassKit brings exactly this look to the web – for apps and UIs that feel modern and native.
|
|
38
38
|
|
|
39
|
-
**
|
|
39
|
+
**One CSS file. No build tools. No dependencies.**
|
|
40
40
|
|
|
41
41
|
<br>
|
|
42
42
|
|
|
43
|
-
###
|
|
43
|
+
### Why GlassKit?
|
|
44
44
|
|
|
45
|
-
- 🎨 **
|
|
46
|
-
- 🌗 **Dark & Light Mode** –
|
|
47
|
-
- 🎛️ **Design Tokens** –
|
|
48
|
-
- 📱 **Mobile-first** –
|
|
49
|
-
- 🔌 **Framework-
|
|
50
|
-
- 🧩 **Shadow
|
|
51
|
-
- 🪶 **
|
|
52
|
-
- 🎯 **BEM-
|
|
45
|
+
- 🎨 **Pure CSS** – no JavaScript framework required
|
|
46
|
+
- 🌗 **Dark & Light Mode** – toggle with a single attribute
|
|
47
|
+
- 🎛️ **Design Tokens** – all values controlled via CSS Custom Properties
|
|
48
|
+
- 📱 **Mobile-first** – optimized for touch devices and `safe-area-inset`
|
|
49
|
+
- 🔌 **Framework-agnostic** – works with React, Vue, Svelte, plain HTML, or any other stack
|
|
50
|
+
- 🧩 **Shadow DOM ready** – Constructable Stylesheet for Web Components included
|
|
51
|
+
- 🪶 **Lightweight** – ~45 KB (uncompressed), no external dependencies
|
|
52
|
+
- 🎯 **BEM-like naming convention** – `glass-*` prefix, no conflicts with existing CSS
|
|
53
53
|
|
|
54
54
|
---
|
|
55
55
|
|
|
56
56
|
## 📥 Installation
|
|
57
57
|
|
|
58
|
-
GlassKit
|
|
58
|
+
GlassKit can be included in several ways – choose the one that best fits your project:
|
|
59
59
|
|
|
60
|
-
### CDN (
|
|
60
|
+
### CDN (recommended for quick start)
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
No download, no build tool – just include and go:
|
|
63
63
|
|
|
64
64
|
```html
|
|
65
|
-
<!-- jsDelivr –
|
|
66
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/glasskit@1.3
|
|
65
|
+
<!-- jsDelivr – Minified -->
|
|
66
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/glasskit@1.3/glasskit.min.css">
|
|
67
67
|
|
|
68
|
-
<!-- jsDelivr –
|
|
69
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/glasskit@1.3
|
|
68
|
+
<!-- jsDelivr – Unminified (for reading/debugging) -->
|
|
69
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@jungherz-de/glasskit@1.3/glasskit.css">
|
|
70
70
|
|
|
71
71
|
<!-- unpkg – Alternative -->
|
|
72
|
-
<link rel="stylesheet" href="https://unpkg.com/@jungherz-de/glasskit@1.3
|
|
72
|
+
<link rel="stylesheet" href="https://unpkg.com/@jungherz-de/glasskit@1.3/glasskit.min.css">
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
-
> **
|
|
75
|
+
> **Tip:** Replace `@1.3` with `@latest` for the newest version – or pin to a specific version for maximum stability.
|
|
76
76
|
|
|
77
77
|
### npm / yarn / pnpm
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
For projects with a build pipeline:
|
|
80
80
|
|
|
81
81
|
```bash
|
|
82
82
|
# npm
|
|
@@ -89,27 +89,27 @@ yarn add @jungherz-de/glasskit
|
|
|
89
89
|
pnpm add @jungherz-de/glasskit
|
|
90
90
|
```
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
Then import in your CSS or build tool:
|
|
93
93
|
|
|
94
94
|
```css
|
|
95
|
-
/* In
|
|
95
|
+
/* In your CSS file */
|
|
96
96
|
@import '@jungherz-de/glasskit/glasskit.css';
|
|
97
97
|
```
|
|
98
98
|
|
|
99
99
|
```js
|
|
100
|
-
//
|
|
100
|
+
// Or in JS (Webpack, Vite, etc.)
|
|
101
101
|
import '@jungherz-de/glasskit/glasskit.css';
|
|
102
102
|
```
|
|
103
103
|
|
|
104
|
-
###
|
|
104
|
+
### Direct Download
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
Download the files directly from the [GitHub Release](https://github.com/JUNGHERZ/GlassKit/releases/latest):
|
|
107
107
|
|
|
108
108
|
```html
|
|
109
|
-
<!--
|
|
109
|
+
<!-- Include locally -->
|
|
110
110
|
<link rel="stylesheet" href="glasskit.min.css">
|
|
111
111
|
|
|
112
|
-
<!-- Optional:
|
|
112
|
+
<!-- Optional: custom theme -->
|
|
113
113
|
<link rel="stylesheet" href="theme-override.css">
|
|
114
114
|
```
|
|
115
115
|
|
|
@@ -117,17 +117,17 @@ Lade die Dateien direkt vom [GitHub Release](https://github.com/JUNGHERZ/GlassKi
|
|
|
117
117
|
|
|
118
118
|
## 🚀 Quick Start
|
|
119
119
|
|
|
120
|
-
### 1.
|
|
120
|
+
### 1. Set the theme
|
|
121
121
|
|
|
122
122
|
```html
|
|
123
|
-
<!-- Dark Mode (
|
|
123
|
+
<!-- Dark Mode (default) -->
|
|
124
124
|
<html data-theme="dark">
|
|
125
125
|
|
|
126
126
|
<!-- Light Mode -->
|
|
127
127
|
<html data-theme="light">
|
|
128
128
|
```
|
|
129
129
|
|
|
130
|
-
### 2.
|
|
130
|
+
### 2. Start building
|
|
131
131
|
|
|
132
132
|
```html
|
|
133
133
|
<div class="glass-bg">
|
|
@@ -138,14 +138,14 @@ Lade die Dateien direkt vom [GitHub Release](https://github.com/JUNGHERZ/GlassKi
|
|
|
138
138
|
</button>
|
|
139
139
|
</nav>
|
|
140
140
|
|
|
141
|
-
<h1 class="glass-title">
|
|
141
|
+
<h1 class="glass-title">Hello World</h1>
|
|
142
142
|
|
|
143
143
|
<div class="glass-card glass-card--glow">
|
|
144
|
-
<p class="glass-card__text">
|
|
144
|
+
<p class="glass-card__text">This is GlassKit.</p>
|
|
145
145
|
</div>
|
|
146
146
|
|
|
147
147
|
<button class="glass-btn glass-btn--primary">
|
|
148
|
-
|
|
148
|
+
Get Started
|
|
149
149
|
</button>
|
|
150
150
|
|
|
151
151
|
</div>
|
|
@@ -153,53 +153,53 @@ Lade die Dateien direkt vom [GitHub Release](https://github.com/JUNGHERZ/GlassKi
|
|
|
153
153
|
|
|
154
154
|
---
|
|
155
155
|
|
|
156
|
-
## 📦
|
|
156
|
+
## 📦 Components
|
|
157
157
|
|
|
158
158
|
### Navigation & Layout
|
|
159
159
|
|
|
160
|
-
|
|
|
160
|
+
| Component | Class | Description |
|
|
161
161
|
|---|---|---|
|
|
162
|
-
| **
|
|
163
|
-
| **Nav
|
|
164
|
-
| **Pill
|
|
165
|
-
| **Tab
|
|
166
|
-
| **Accordion** | `.glass-accordion` |
|
|
167
|
-
| **Divider** | `.glass-divider` | Fading
|
|
162
|
+
| **Background** | `.glass-bg` | Aurora gradient with light effects |
|
|
163
|
+
| **Nav Bar** | `.glass-nav` | Transparent navigation |
|
|
164
|
+
| **Pill Button** | `.glass-pill` | Round glass icon button (46×46) |
|
|
165
|
+
| **Tab Bar** | `.glass-tab-bar` | Fixed bottom navigation |
|
|
166
|
+
| **Accordion** | `.glass-accordion` | Collapsible content sections |
|
|
167
|
+
| **Divider** | `.glass-divider` | Fading separator line |
|
|
168
168
|
|
|
169
|
-
###
|
|
169
|
+
### Content
|
|
170
170
|
|
|
171
|
-
|
|
|
171
|
+
| Component | Class | Description |
|
|
172
172
|
|---|---|---|
|
|
173
|
-
| **
|
|
174
|
-
| **Card** | `.glass-card` |
|
|
175
|
-
| **Card (Glow)** | `.glass-card--glow` | Card
|
|
176
|
-
| **Badge** | `.glass-badge` | Tags &
|
|
177
|
-
| **Avatar** | `.glass-avatar` |
|
|
178
|
-
| **Status** | `.glass-status` |
|
|
173
|
+
| **Title** | `.glass-title` | Page title with text shadow |
|
|
174
|
+
| **Card** | `.glass-card` | Glass container for content |
|
|
175
|
+
| **Card (Glow)** | `.glass-card--glow` | Card with light-to-milky gradient |
|
|
176
|
+
| **Badge** | `.glass-badge` | Tags & labels |
|
|
177
|
+
| **Avatar** | `.glass-avatar` | Glass circle (sm/md/lg) |
|
|
178
|
+
| **Status** | `.glass-status` | Notice card with icon |
|
|
179
179
|
|
|
180
|
-
###
|
|
180
|
+
### Actions & Feedback
|
|
181
181
|
|
|
182
|
-
|
|
|
182
|
+
| Component | Class | Description |
|
|
183
183
|
|---|---|---|
|
|
184
|
-
| **Button (Primary)** | `.glass-btn--primary` |
|
|
185
|
-
| **Button (Secondary)** | `.glass-btn--secondary` |
|
|
186
|
-
| **Button (Tertiary)** | `.glass-btn--tertiary` |
|
|
187
|
-
| **Modal** | `.glass-modal` |
|
|
188
|
-
| **Toast** | `.glass-toast` |
|
|
184
|
+
| **Button (Primary)** | `.glass-btn--primary` | Colored gradient – primary action |
|
|
185
|
+
| **Button (Secondary)** | `.glass-btn--secondary` | Milky white – secondary action |
|
|
186
|
+
| **Button (Tertiary)** | `.glass-btn--tertiary` | Subtle glass – tertiary action |
|
|
187
|
+
| **Modal** | `.glass-modal` | Centered dialog with blur overlay |
|
|
188
|
+
| **Toast** | `.glass-toast` | Temporary notification |
|
|
189
189
|
|
|
190
|
-
###
|
|
190
|
+
### Form Elements
|
|
191
191
|
|
|
192
|
-
|
|
|
192
|
+
| Component | Class | Description |
|
|
193
193
|
|---|---|---|
|
|
194
|
-
| **Input** | `.glass-input` |
|
|
195
|
-
| **Textarea** | `.glass-textarea` |
|
|
196
|
-
| **Select** | `.glass-select` | Dropdown
|
|
197
|
-
| **
|
|
198
|
-
| **Toggle** | `.glass-toggle` | iOS-
|
|
199
|
-
| **Checkbox** | `.glass-checkbox` |
|
|
200
|
-
| **Radio** | `.glass-radio` |
|
|
201
|
-
| **Range Slider** | `.glass-range` | Slider
|
|
202
|
-
| **Progress Bar** | `.glass-progress` |
|
|
194
|
+
| **Input** | `.glass-input` | Text field with glass background |
|
|
195
|
+
| **Textarea** | `.glass-textarea` | Multi-line input |
|
|
196
|
+
| **Select** | `.glass-select` | Dropdown with custom chevron |
|
|
197
|
+
| **Search** | `.glass-search` | Input with search icon |
|
|
198
|
+
| **Toggle** | `.glass-toggle` | iOS-style switch |
|
|
199
|
+
| **Checkbox** | `.glass-checkbox` | Animated checkmark |
|
|
200
|
+
| **Radio** | `.glass-radio` | Animated dot |
|
|
201
|
+
| **Range Slider** | `.glass-range` | Slider with gradient thumb |
|
|
202
|
+
| **Progress Bar** | `.glass-progress` | Progress bar with shimmer |
|
|
203
203
|
|
|
204
204
|
---
|
|
205
205
|
|
|
@@ -207,7 +207,7 @@ Lade die Dateien direkt vom [GitHub Release](https://github.com/JUNGHERZ/GlassKi
|
|
|
207
207
|
|
|
208
208
|
### Dark / Light Mode
|
|
209
209
|
|
|
210
|
-
GlassKit
|
|
210
|
+
GlassKit supports two themes out of the box. Toggle via the `data-theme` attribute:
|
|
211
211
|
|
|
212
212
|
```js
|
|
213
213
|
// Toggle
|
|
@@ -218,7 +218,7 @@ function toggleTheme() {
|
|
|
218
218
|
}
|
|
219
219
|
```
|
|
220
220
|
|
|
221
|
-
|
|
221
|
+
There's also a ready-made **Theme Toggle component**:
|
|
222
222
|
|
|
223
223
|
```html
|
|
224
224
|
<button class="glass-theme-toggle" onclick="toggleTheme()">
|
|
@@ -227,14 +227,14 @@ Es gibt auch eine fertige **Theme-Toggle-Komponente**:
|
|
|
227
227
|
</svg>
|
|
228
228
|
<svg class="icon-sun" viewBox="0 0 24 24">
|
|
229
229
|
<circle cx="12" cy="12" r="5"/>
|
|
230
|
-
<!-- ...
|
|
230
|
+
<!-- ... rays ... -->
|
|
231
231
|
</svg>
|
|
232
232
|
</button>
|
|
233
233
|
```
|
|
234
234
|
|
|
235
|
-
###
|
|
235
|
+
### Custom Brand Colors
|
|
236
236
|
|
|
237
|
-
|
|
237
|
+
Create a `theme-override.css` and load it **after** the base library:
|
|
238
238
|
|
|
239
239
|
```css
|
|
240
240
|
/* theme-override.css */
|
|
@@ -252,29 +252,29 @@ Erstelle eine `theme-override.css` und lade sie **nach** der Basis-Library:
|
|
|
252
252
|
}
|
|
253
253
|
```
|
|
254
254
|
|
|
255
|
-
|
|
255
|
+
The `theme-override.css` template comes with **4 example themes**:
|
|
256
256
|
- 🔵 Ocean Blue
|
|
257
257
|
- 🟢 Emerald Green
|
|
258
258
|
- 🌹 Rose
|
|
259
|
-
- 🎨 Custom (
|
|
259
|
+
- 🎨 Custom (empty, ready to fill)
|
|
260
260
|
|
|
261
261
|
---
|
|
262
262
|
|
|
263
263
|
## 🎛️ Design Tokens
|
|
264
264
|
|
|
265
|
-
|
|
265
|
+
All visual values are controlled via CSS Custom Properties:
|
|
266
266
|
|
|
267
267
|
```css
|
|
268
|
-
/*
|
|
269
|
-
--gl-color-primary /*
|
|
270
|
-
--gl-color-text /*
|
|
271
|
-
--gl-color-text-muted /*
|
|
268
|
+
/* Colors */
|
|
269
|
+
--gl-color-primary /* Primary color */
|
|
270
|
+
--gl-color-text /* Text color */
|
|
271
|
+
--gl-color-text-muted /* Secondary text */
|
|
272
272
|
|
|
273
|
-
/*
|
|
273
|
+
/* Glass surfaces (gradations) */
|
|
274
274
|
--gl-surface-1 … --gl-surface-5
|
|
275
275
|
|
|
276
276
|
/* Blur */
|
|
277
|
-
--gl-blur /* 24px –
|
|
277
|
+
--gl-blur /* 24px – default */
|
|
278
278
|
--gl-blur-light /* 16px */
|
|
279
279
|
--gl-blur-heavy /* 40px */
|
|
280
280
|
|
|
@@ -291,23 +291,23 @@ Alle visuellen Werte werden über CSS Custom Properties gesteuert:
|
|
|
291
291
|
--gl-inset-strong
|
|
292
292
|
```
|
|
293
293
|
|
|
294
|
-
|
|
294
|
+
The full token reference can be found in the [Documentation](docs.html).
|
|
295
295
|
|
|
296
296
|
---
|
|
297
297
|
|
|
298
|
-
## 🛠️ Utility
|
|
298
|
+
## 🛠️ Utility Classes
|
|
299
299
|
|
|
300
300
|
```css
|
|
301
|
-
/* Flex
|
|
302
|
-
.gl-stack /*
|
|
301
|
+
/* Flex Layout */
|
|
302
|
+
.gl-stack /* Vertical stack */
|
|
303
303
|
.gl-stack--sm /* Gap: 12px */
|
|
304
|
-
.gl-row /*
|
|
304
|
+
.gl-row /* Horizontal row */
|
|
305
305
|
.gl-row--sm /* Gap: 12px */
|
|
306
306
|
|
|
307
307
|
/* Spacing */
|
|
308
|
-
.gl-mt-md /* Margin-
|
|
309
|
-
.gl-mb-lg /* Margin-
|
|
310
|
-
.gl-px /*
|
|
308
|
+
.gl-mt-md /* Margin-top: 16px */
|
|
309
|
+
.gl-mb-lg /* Margin-bottom: 20px */
|
|
310
|
+
.gl-px /* Horizontal padding */
|
|
311
311
|
|
|
312
312
|
/* Text */
|
|
313
313
|
.gl-text-center
|
|
@@ -323,22 +323,22 @@ Die vollständige Token-Referenz findest du in der [Dokumentation](docs.html).
|
|
|
323
323
|
|
|
324
324
|
## 🧩 Web Components / Shadow DOM
|
|
325
325
|
|
|
326
|
-
|
|
326
|
+
The Shadow DOM encapsulates styles – external stylesheets like `glasskit.css` are not automatically inherited into the shadow tree. GlassKit therefore ships a ready-made **Constructable Stylesheet** that you can use directly in Web Components.
|
|
327
327
|
|
|
328
|
-
###
|
|
328
|
+
### The Problem
|
|
329
329
|
|
|
330
|
-
- CSS
|
|
331
|
-
-
|
|
332
|
-
-
|
|
330
|
+
- CSS classes (`.glass-card`, `.glass-btn`, etc.) do **not** work inside the Shadow DOM
|
|
331
|
+
- Only **CSS Custom Properties** (`--gl-*`) penetrate the shadow boundary automatically
|
|
332
|
+
- Without a solution, each component would need to load and parse the CSS itself
|
|
333
333
|
|
|
334
|
-
###
|
|
334
|
+
### The Solution: `glasskit-styles.js`
|
|
335
335
|
|
|
336
|
-
GlassKit
|
|
336
|
+
GlassKit provides an ES module that exports the minified CSS as a [Constructable Stylesheet](https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/CSSStyleSheet). The stylesheet is held **once** in memory and can be shared across any number of shadow roots – without duplicate parsing.
|
|
337
337
|
|
|
338
338
|
```js
|
|
339
339
|
import { glassSheet } from '@jungherz-de/glasskit/glasskit-styles.js';
|
|
340
340
|
|
|
341
|
-
// In
|
|
341
|
+
// In a Web Component:
|
|
342
342
|
class MyCard extends HTMLElement {
|
|
343
343
|
constructor() {
|
|
344
344
|
super();
|
|
@@ -354,9 +354,9 @@ class MyCard extends HTMLElement {
|
|
|
354
354
|
customElements.define('my-card', MyCard);
|
|
355
355
|
```
|
|
356
356
|
|
|
357
|
-
###
|
|
357
|
+
### Example: Hybrids.js
|
|
358
358
|
|
|
359
|
-
GlassKit
|
|
359
|
+
GlassKit works great with lightweight Web Component frameworks like [Hybrids](https://hybrids.js.org/):
|
|
360
360
|
|
|
361
361
|
```js
|
|
362
362
|
import { define, html } from 'hybrids';
|
|
@@ -374,7 +374,7 @@ define({
|
|
|
374
374
|
});
|
|
375
375
|
```
|
|
376
376
|
|
|
377
|
-
###
|
|
377
|
+
### Example: Lit
|
|
378
378
|
|
|
379
379
|
```js
|
|
380
380
|
import { LitElement, html } from 'lit';
|
|
@@ -396,105 +396,106 @@ customElements.define('my-card', MyCard);
|
|
|
396
396
|
|
|
397
397
|
### Exports
|
|
398
398
|
|
|
399
|
-
| Export |
|
|
399
|
+
| Export | Type | Description |
|
|
400
400
|
|---|---|---|
|
|
401
|
-
| `glassSheet` | `CSSStyleSheet` |
|
|
402
|
-
| `css` | `string` | CSS
|
|
401
|
+
| `glassSheet` | `CSSStyleSheet` | Ready-made Constructable Stylesheet – use directly with `adoptedStyleSheets` |
|
|
402
|
+
| `css` | `string` | CSS as string – fallback for environments without Constructable Stylesheet support |
|
|
403
403
|
|
|
404
|
-
### Theming
|
|
404
|
+
### Theming in the Shadow DOM
|
|
405
405
|
|
|
406
|
-
|
|
406
|
+
Since CSS Custom Properties penetrate the shadow boundary, **theme switching works automatically**. Set `data-theme` on the `<html>` element as usual – all GlassKit tokens will be updated across all shadow roots:
|
|
407
407
|
|
|
408
408
|
```js
|
|
409
|
-
//
|
|
409
|
+
// Works globally – including all Web Components
|
|
410
410
|
document.documentElement.setAttribute('data-theme', 'light');
|
|
411
411
|
```
|
|
412
412
|
|
|
413
|
-
> **
|
|
413
|
+
> **Tip:** For maximum performance with many component instances, import `glassSheet` once and share it across all components. The browser keeps the stylesheet in memory only once.
|
|
414
414
|
|
|
415
415
|
---
|
|
416
416
|
|
|
417
|
-
## 📁
|
|
417
|
+
## 📁 Project Structure
|
|
418
418
|
|
|
419
419
|
```
|
|
420
420
|
glasskit/
|
|
421
|
-
├── glasskit.css #
|
|
422
|
-
├── glasskit.min.css #
|
|
423
|
-
├── glasskit-styles.js # Constructable Stylesheet
|
|
424
|
-
├── theme-override.css # Template
|
|
425
|
-
├── build-styles-js.mjs # Build
|
|
426
|
-
├── package.json # npm
|
|
427
|
-
├── index.html #
|
|
428
|
-
├── showcase.html #
|
|
429
|
-
├── docs.html #
|
|
421
|
+
├── glasskit.css # Core library (all components + tokens)
|
|
422
|
+
├── glasskit.min.css # Minified version (auto-generated on release)
|
|
423
|
+
├── glasskit-styles.js # Constructable Stylesheet for Shadow DOM (auto-generated)
|
|
424
|
+
├── theme-override.css # Template for custom themes
|
|
425
|
+
├── build-styles-js.mjs # Build script for glasskit-styles.js
|
|
426
|
+
├── package.json # npm package definition
|
|
427
|
+
├── index.html # Landing page with iPhone wireframe
|
|
428
|
+
├── showcase.html # Interactive showcase of all components
|
|
429
|
+
├── docs.html # Full documentation
|
|
430
|
+
├── de/ # German translations (index, docs, showcase)
|
|
430
431
|
├── LICENSE # MIT License
|
|
431
|
-
└── README.md #
|
|
432
|
+
└── README.md # This file
|
|
432
433
|
```
|
|
433
434
|
|
|
434
435
|
---
|
|
435
436
|
|
|
436
|
-
## 📖
|
|
437
|
+
## 📖 Documentation
|
|
437
438
|
|
|
438
|
-
|
|
439
|
+
The full documentation with **live previews**, **copy-paste code blocks**, and **class reference tables** is available in `docs.html`:
|
|
439
440
|
|
|
440
|
-
- Sidebar
|
|
441
|
-
- Live
|
|
442
|
-
- Design
|
|
443
|
-
- Theming
|
|
444
|
-
-
|
|
441
|
+
- Sidebar navigation to all 22 components
|
|
442
|
+
- Live previews on a real glassmorphism background
|
|
443
|
+
- Design token reference
|
|
444
|
+
- Theming guide
|
|
445
|
+
- Complete class overview at the end
|
|
445
446
|
|
|
446
447
|
---
|
|
447
448
|
|
|
448
|
-
## 🌐 Browser
|
|
449
|
+
## 🌐 Browser Compatibility
|
|
449
450
|
|
|
450
|
-
GlassKit
|
|
451
|
+
GlassKit uses `backdrop-filter` for glass effects. Support:
|
|
451
452
|
|
|
452
453
|
| Browser | Support |
|
|
453
454
|
|---|---|
|
|
454
|
-
| Safari (iOS/macOS) | ✅
|
|
455
|
-
| Chrome / Edge | ✅
|
|
456
|
-
| Firefox | ✅
|
|
457
|
-
| Samsung Internet | ✅
|
|
455
|
+
| Safari (iOS/macOS) | ✅ Full |
|
|
456
|
+
| Chrome / Edge | ✅ Full |
|
|
457
|
+
| Firefox | ✅ From version 103 |
|
|
458
|
+
| Samsung Internet | ✅ Full |
|
|
458
459
|
|
|
459
|
-
> **
|
|
460
|
+
> **Note:** In browsers without `backdrop-filter` support, elements will be rendered with the defined background colors – the UI remains usable, just without the blur effect.
|
|
460
461
|
|
|
461
462
|
---
|
|
462
463
|
|
|
463
|
-
## 📋 States &
|
|
464
|
+
## 📋 States & Modifiers – Cheat Sheet
|
|
464
465
|
|
|
465
466
|
```
|
|
466
|
-
|
|
467
|
-
.is-active → Tab
|
|
468
|
-
.is-open → Accordion
|
|
467
|
+
Interactive States:
|
|
468
|
+
.is-active → Tab Bar item, Modal Overlay
|
|
469
|
+
.is-open → Accordion item
|
|
469
470
|
.is-visible → Toast
|
|
470
471
|
:checked → Toggle, Checkbox, Radio
|
|
471
472
|
:focus → Input, Textarea, Select, Range
|
|
472
473
|
:disabled → Input
|
|
473
474
|
|
|
474
|
-
Button
|
|
475
|
+
Button Modifiers:
|
|
475
476
|
.glass-btn--primary / --secondary / --tertiary
|
|
476
477
|
.glass-btn--sm / --lg / --auto
|
|
477
478
|
|
|
478
|
-
Card
|
|
479
|
+
Card Modifiers:
|
|
479
480
|
.glass-card--glow
|
|
480
481
|
|
|
481
|
-
Progress
|
|
482
|
+
Progress Modifiers:
|
|
482
483
|
.glass-progress--sm / --lg
|
|
483
484
|
.glass-progress--success / --error
|
|
484
485
|
|
|
485
|
-
Badge
|
|
486
|
+
Badge Modifiers:
|
|
486
487
|
.glass-badge--primary / --success / --error
|
|
487
488
|
|
|
488
|
-
Avatar
|
|
489
|
+
Avatar Modifiers:
|
|
489
490
|
.glass-avatar--sm / --lg
|
|
490
491
|
|
|
491
|
-
Toast
|
|
492
|
+
Toast Modifiers:
|
|
492
493
|
.glass-toast--success / --error / --warning
|
|
493
494
|
|
|
494
|
-
Modal
|
|
495
|
+
Modal Action Modifiers:
|
|
495
496
|
.glass-modal__action--primary / --danger
|
|
496
497
|
|
|
497
|
-
Background
|
|
498
|
+
Background Modifiers:
|
|
498
499
|
.glass-bg--has-tab-bar
|
|
499
500
|
```
|
|
500
501
|
|
|
@@ -502,43 +503,43 @@ Background-Modifier:
|
|
|
502
503
|
|
|
503
504
|
## 🤝 Contributing
|
|
504
505
|
|
|
505
|
-
|
|
506
|
+
Contributions are welcome! Here's how you can help:
|
|
506
507
|
|
|
507
|
-
1. **Fork**
|
|
508
|
-
2.
|
|
509
|
-
3. **Commit**
|
|
510
|
-
4. **Push**
|
|
511
|
-
5.
|
|
508
|
+
1. **Fork** the repository
|
|
509
|
+
2. Create a **feature branch** (`git checkout -b feature/my-idea`)
|
|
510
|
+
3. **Commit** your changes (`git commit -m 'feat: New component XY'`)
|
|
511
|
+
4. **Push** the branch (`git push origin feature/my-idea`)
|
|
512
|
+
5. Open a **Pull Request**
|
|
512
513
|
|
|
513
514
|
### Guidelines
|
|
514
515
|
|
|
515
|
-
-
|
|
516
|
-
-
|
|
517
|
-
-
|
|
518
|
-
-
|
|
516
|
+
- Follow the **BEM-like naming convention** (`glass-*` prefix)
|
|
517
|
+
- Use existing **Design Tokens** instead of hard-coded values
|
|
518
|
+
- Make sure new components work in **both Dark and Light Mode**
|
|
519
|
+
- Test on **mobile** (touch targets at least 44px)
|
|
519
520
|
|
|
520
521
|
---
|
|
521
522
|
|
|
522
|
-
## 📄
|
|
523
|
+
## 📄 License
|
|
523
524
|
|
|
524
|
-
GlassKit
|
|
525
|
+
GlassKit is released under the **MIT License**. See [LICENSE](LICENSE) for details.
|
|
525
526
|
|
|
526
|
-
|
|
527
|
+
Free to use for personal and commercial projects.
|
|
527
528
|
|
|
528
529
|
---
|
|
529
530
|
|
|
530
531
|
## 📋 Changelog
|
|
531
532
|
|
|
532
|
-
|
|
533
|
+
All changes, bugfixes, and design decisions are documented in the **[CHANGELOG.md](CHANGELOG.md)**.
|
|
533
534
|
|
|
534
535
|
---
|
|
535
536
|
|
|
536
537
|
## 🏢 Credits
|
|
537
538
|
|
|
538
|
-
|
|
539
|
+
Developed by **[Jungherz GmbH](https://www.jungherz.com)**
|
|
539
540
|
|
|
540
541
|
---
|
|
541
542
|
|
|
542
543
|
<p align="center">
|
|
543
|
-
<sub>
|
|
544
|
+
<sub>Built with 🧊 and lots of attention to detail.</sub>
|
|
544
545
|
</p>
|
package/glasskit-styles.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// GlassKit v1.3.
|
|
1
|
+
// GlassKit v1.3.3 – Constructable Stylesheet
|
|
2
2
|
// Auto-generated by build-styles-js.mjs – do not edit manually.
|
|
3
3
|
|
|
4
4
|
const css = "[class*=gl-],[class*=glass-],[class*=glass-]::after,[class*=glass-]::before{box-sizing:border-box}:root,[data-theme=dark]{--gl-color-primary:#f5a623;--gl-color-primary-dark:#d4692a;--gl-color-primary-mid:#e07a24;--gl-color-bg-dark:#0e2530;--gl-color-bg-mid:#1a3d4e;--gl-color-bg-light:#1b3e50;--gl-color-text:#ffffff;--gl-color-text-muted:rgba(255, 255, 255, 0.60);--gl-color-text-on-light:#1a3a4a;--gl-color-text-heading:#ffffff;--gl-color-success:#34c759;--gl-color-error:#ff3b30;--gl-color-warning:#ffcc00;--gl-surface-1:rgba(255, 255, 255, 0.08);--gl-surface-2:rgba(255, 255, 255, 0.10);--gl-surface-3:rgba(255, 255, 255, 0.14);--gl-surface-4:rgba(255, 255, 255, 0.16);--gl-surface-5:rgba(255, 255, 255, 0.22);--gl-surface-milk:rgba(255, 255, 255, 0.55);--gl-surface-milk-strong:rgba(255, 255, 255, 0.75);--gl-surface-overlay:rgba(0, 0, 0, 0.50);--gl-card-glow-top:rgba(255, 255, 255, 0.32);--gl-card-glow-mid:rgba(255, 255, 255, 0.22);--gl-card-glow-low:rgba(255, 255, 255, 0.14);--gl-card-glow-bottom:rgba(255, 255, 255, 0.08);--gl-card-icon-color:rgba(255, 255, 255, 0.8);--gl-card-text-color:rgba(255, 255, 255, 0.7);--gl-border-subtle:rgba(255, 255, 255, 0.18);--gl-border-medium:rgba(255, 255, 255, 0.30);--gl-border-strong:rgba(255, 255, 255, 0.40);--gl-border-milk:rgba(255, 255, 255, 0.60);--gl-border-warm:rgba(255, 200, 100, 0.35);--gl-border-focus:rgba(245, 166, 35, 0.60);--gl-icon-default:rgba(255, 255, 255, 0.6);--gl-icon-muted:rgba(255, 255, 255, 0.45);--gl-icon-strong:rgba(255, 255, 255, 0.8);--gl-icon-on-primary:#ffffff;--gl-icon-on-secondary:#1a3a4a;--gl-icon-on-tertiary:rgba(255, 255, 255, 0.6);--gl-blur:24px;--gl-blur-light:16px;--gl-blur-soft:12px;--gl-blur-heavy:40px;--gl-radius-pill:50%;--gl-radius-full:9999px;--gl-radius-card:24px;--gl-radius-btn:16px;--gl-radius-input:14px;--gl-radius-sm:12px;--gl-radius-xs:8px;--gl-shadow-card:0 8px 32px rgba(0, 0, 0, 0.18);--gl-shadow-btn:0 4px 16px rgba(0, 0, 0, 0.12);--gl-shadow-btn-primary:0 6px 24px rgba(230, 130, 40, 0.35),0 2px 8px rgba(0, 0, 0, 0.15);--gl-shadow-glow:0 2px 12px rgba(255, 255, 255, 0.08),0 4px 16px rgba(0, 0, 0, 0.15);--gl-shadow-modal:0 24px 80px rgba(0, 0, 0, 0.4),0 8px 32px rgba(0, 0, 0, 0.2);--gl-shadow-toast:0 8px 32px rgba(0, 0, 0, 0.25);--gl-shadow-focus:0 0 0 3px rgba(245, 166, 35, 0.3);--gl-inset-subtle:inset 0 1px 1px rgba(255, 255, 255, 0.10);--gl-inset-medium:inset 0 1px 1px rgba(255, 255, 255, 0.15);--gl-inset-strong:inset 0 1px 2px rgba(255, 255, 255, 0.25);--gl-inset-milk:inset 0 1px 2px rgba(255, 255, 255, 0.40);--gl-bg-aurora-1:rgba(60, 160, 160, 0.25);--gl-bg-aurora-2:rgba(200, 140, 60, 0.12);--gl-bg-aurora-3:rgba(80, 180, 200, 0.18);--gl-bg-light-streak-1:rgba(90, 210, 200, 0.14);--gl-bg-light-streak-2:rgba(110, 200, 190, 0.10);--gl-bg-warm-glow:rgba(220, 160, 70, 0.10);--gl-space-2xs:4px;--gl-space-xs:8px;--gl-space-sm:12px;--gl-space-md:16px;--gl-space-lg:20px;--gl-space-xl:24px;--gl-space-2xl:32px;--gl-space-3xl:40px;--gl-space-4xl:56px;--gl-font-family:-apple-system,BlinkMacSystemFont,'SF Pro Display','Segoe UI',Roboto,Helvetica,Arial,sans-serif;--gl-font-size-xs:13px;--gl-font-size-sm:14px;--gl-font-size-base:15px;--gl-font-size-btn:16px;--gl-font-size-lg:18px;--gl-font-size-title:24px;--gl-font-size-modal:20px;--gl-font-weight-normal:400;--gl-font-weight-medium:500;--gl-font-weight-semibold:600;--gl-transition:all 0.25s ease;--gl-transition-fast:all 0.15s ease;--gl-transition-modal:all 0.3s cubic-bezier(0.4, 0, 0.2, 1);--gl-tab-bar-height:82px;--gl-placeholder:rgba(255, 255, 255, 0.35);--gl-accordion-body-color:var(--gl-color-text-muted);--gl-toggle-thumb-bg:linear-gradient(to bottom,\n rgba(255,255,255,0.9) 0%,\n rgba(255,255,255,0.7) 100%);--gl-range-track-bg:var(--gl-surface-2);--gl-range-track-border:var(--gl-border-subtle)}[data-theme=light]{--gl-color-primary:#e8852d;--gl-color-primary-dark:#c96a1e;--gl-color-primary-mid:#d97826;--gl-color-bg-dark:#e8ecf1;--gl-color-bg-mid:#f0f4f8;--gl-color-bg-light:#f5f7fa;--gl-color-text:#1a2a36;--gl-color-text-muted:rgba(26, 42, 54, 0.55);--gl-color-text-on-light:#1a3a4a;--gl-color-text-heading:#0f1f2a;--gl-color-success:#28a745;--gl-color-error:#dc3545;--gl-color-warning:#e6a800;--gl-surface-1:rgba(255, 255, 255, 0.50);--gl-surface-2:rgba(255, 255, 255, 0.60);--gl-surface-3:rgba(255, 255, 255, 0.70);--gl-surface-4:rgba(255, 255, 255, 0.75);--gl-surface-5:rgba(255, 255, 255, 0.85);--gl-surface-milk:rgba(255, 255, 255, 0.85);--gl-surface-milk-strong:rgba(255, 255, 255, 0.92);--gl-surface-overlay:rgba(0, 0, 0, 0.25);--gl-card-glow-top:rgba(255, 255, 255, 0.90);--gl-card-glow-mid:rgba(255, 255, 255, 0.78);--gl-card-glow-low:rgba(255, 255, 255, 0.65);--gl-card-glow-bottom:rgba(255, 255, 255, 0.50);--gl-card-icon-color:rgba(26, 42, 54, 0.5);--gl-card-text-color:rgba(26, 42, 54, 0.6);--gl-border-subtle:rgba(0, 0, 0, 0.08);--gl-border-medium:rgba(0, 0, 0, 0.12);--gl-border-strong:rgba(0, 0, 0, 0.15);--gl-border-milk:rgba(0, 0, 0, 0.10);--gl-border-warm:rgba(232, 133, 45, 0.30);--gl-border-focus:rgba(232, 133, 45, 0.50);--gl-icon-default:rgba(26, 42, 54, 0.50);--gl-icon-muted:rgba(26, 42, 54, 0.35);--gl-icon-strong:rgba(26, 42, 54, 0.70);--gl-icon-on-primary:#ffffff;--gl-icon-on-secondary:#1a3a4a;--gl-icon-on-tertiary:rgba(26, 42, 54, 0.50);--gl-shadow-card:0 4px 20px rgba(0, 0, 0, 0.06);--gl-shadow-btn:0 2px 10px rgba(0, 0, 0, 0.06);--gl-shadow-btn-primary:0 4px 16px rgba(232, 133, 45, 0.25),0 2px 6px rgba(0, 0, 0, 0.08);--gl-shadow-glow:0 2px 8px rgba(0, 0, 0, 0.05),0 4px 12px rgba(0, 0, 0, 0.04);--gl-shadow-modal:0 16px 48px rgba(0, 0, 0, 0.12),0 4px 16px rgba(0, 0, 0, 0.08);--gl-shadow-toast:0 4px 20px rgba(0, 0, 0, 0.10);--gl-shadow-focus:0 0 0 3px rgba(232, 133, 45, 0.25);--gl-inset-subtle:inset 0 1px 1px rgba(255, 255, 255, 0.60);--gl-inset-medium:inset 0 1px 1px rgba(255, 255, 255, 0.70);--gl-inset-strong:inset 0 1px 2px rgba(255, 255, 255, 0.80);--gl-inset-milk:inset 0 1px 2px rgba(255, 255, 255, 0.90);--gl-bg-aurora-1:rgba(100, 200, 220, 0.15);--gl-bg-aurora-2:rgba(240, 180, 100, 0.10);--gl-bg-aurora-3:rgba(120, 200, 230, 0.12);--gl-bg-light-streak-1:rgba(140, 230, 220, 0.10);--gl-bg-light-streak-2:rgba(160, 220, 210, 0.08);--gl-bg-warm-glow:rgba(240, 180, 100, 0.08);--gl-placeholder:rgba(26, 42, 54, 0.30);--gl-accordion-body-color:var(--gl-color-text-muted);--gl-toggle-thumb-bg:linear-gradient(to bottom, #ffffff 0%, #f0f0f0 100%);--gl-range-track-bg:var(--gl-surface-2);--gl-range-track-border:var(--gl-border-subtle)}.glass-bg{background:radial-gradient(ellipse at 20% 40%,var(--gl-bg-aurora-1) 0,transparent 55%),radial-gradient(ellipse at 80% 65%,var(--gl-bg-aurora-2) 0,transparent 50%),radial-gradient(ellipse at 50% 20%,var(--gl-bg-aurora-3) 0,transparent 50%),linear-gradient(170deg,var(--gl-color-bg-light) 0,var(--gl-color-bg-mid) 50%,var(--gl-color-bg-dark) 100%);position:relative;min-height:100vh;overflow-x:hidden;font-family:var(--gl-font-family);color:var(--gl-color-text);-webkit-font-smoothing:antialiased;transition:background .4s,color .3s}.glass-bg::before{content:'';position:absolute;top:20%;left:-30%;width:160%;height:55%;background:radial-gradient(ellipse at 35% 45%,var(--gl-bg-light-streak-1) 0,transparent 50%),radial-gradient(ellipse at 65% 55%,var(--gl-bg-light-streak-2) 0,transparent 45%);transform:rotate(-8deg);pointer-events:none;z-index:0}.glass-bg::after{content:'';position:absolute;top:40%;right:-20%;width:70%;height:50%;background:radial-gradient(ellipse at center,var(--gl-bg-warm-glow) 0,transparent 65%);pointer-events:none;z-index:0}.glass-bg>*{position:relative;z-index:1}.glass-bg--has-tab-bar{padding-bottom:var(--gl-tab-bar-height)}.glass-nav{display:flex;justify-content:space-between;align-items:center;padding:0 var(--gl-space-xs)}.glass-pill{width:46px;height:46px;border-radius:var(--gl-radius-pill);background:var(--gl-surface-3);backdrop-filter:blur(var(--gl-blur));-webkit-backdrop-filter:blur(var(--gl-blur));border:1.5px solid var(--gl-border-strong);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:var(--gl-transition);color:var(--gl-color-text);box-shadow:var(--gl-shadow-glow),var(--gl-inset-medium);outline:0;-webkit-tap-highlight-color:transparent}.glass-pill:hover{background:var(--gl-surface-5);transform:scale(1.05)}.glass-pill:active{transform:scale(.95)}.glass-pill svg{width:20px;height:20px;fill:none;stroke:var(--gl-color-text);stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}.glass-title{text-align:center;color:var(--gl-color-text-heading);font-size:var(--gl-font-size-title);font-weight:var(--gl-font-weight-semibold);line-height:1.3;text-shadow:0 2px 12px rgba(0,0,0,.15);letter-spacing:-.3px}.glass-card{background:var(--gl-surface-2);backdrop-filter:blur(var(--gl-blur));-webkit-backdrop-filter:blur(var(--gl-blur));border:1.5px solid var(--gl-border-medium);border-radius:var(--gl-radius-card);padding:var(--gl-space-3xl) var(--gl-space-xl) var(--gl-space-2xl);box-shadow:var(--gl-shadow-card),var(--gl-inset-strong)}.glass-card--glow{position:relative;overflow:hidden;background:linear-gradient(to bottom,var(--gl-card-glow-top) 0,var(--gl-card-glow-mid) 25%,var(--gl-card-glow-low) 55%,var(--gl-card-glow-bottom) 100%)}.glass-card--glow::before{content:'';position:absolute;top:0;left:10%;right:10%;height:1px;background:linear-gradient(90deg,transparent 0,rgba(255,255,255,.5) 30%,rgba(255,255,255,.6) 50%,rgba(255,255,255,.5) 70%,transparent 100%);z-index:1}.glass-card__icon{display:flex;align-items:center;justify-content:center;margin:0 auto var(--gl-space-lg)}.glass-card__icon svg{width:64px;height:64px;stroke:var(--gl-card-icon-color);stroke-width:1.2;fill:none}.glass-card__text{color:var(--gl-card-text-color);font-size:var(--gl-font-size-base);font-weight:var(--gl-font-weight-normal);line-height:1.55;text-align:center}.glass-btn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;height:56px;border:none;border-radius:var(--gl-radius-btn);font-family:var(--gl-font-family);font-size:var(--gl-font-size-btn);font-weight:var(--gl-font-weight-semibold);cursor:pointer;transition:var(--gl-transition);outline:0;-webkit-tap-highlight-color:transparent}.glass-btn svg{width:20px;height:20px;flex-shrink:0}.glass-btn--primary{background:linear-gradient(135deg,var(--gl-color-primary) 0,var(--gl-color-primary-mid) 50%,var(--gl-color-primary-dark) 100%);color:#fff;border:1px solid var(--gl-border-warm);box-shadow:var(--gl-shadow-btn-primary),var(--gl-inset-strong)}.glass-btn--primary svg{fill:var(--gl-icon-on-primary);stroke:var(--gl-icon-on-primary);stroke-width:0}.glass-btn--primary:hover{transform:translateY(-1px)}.glass-btn--primary:active{transform:translateY(1px)}.glass-btn--secondary{background:linear-gradient(to bottom,var(--gl-surface-milk-strong) 0,var(--gl-surface-milk) 100%);backdrop-filter:blur(var(--gl-blur));-webkit-backdrop-filter:blur(var(--gl-blur));border:1.5px solid var(--gl-border-milk);color:var(--gl-color-text-on-light);box-shadow:var(--gl-shadow-btn),var(--gl-inset-milk)}.glass-btn--secondary svg{fill:none;stroke:var(--gl-icon-on-secondary);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.glass-btn--secondary:hover{transform:translateY(-1px)}.glass-btn--secondary:active{transform:translateY(1px)}.glass-btn--tertiary{background:var(--gl-surface-2);backdrop-filter:blur(var(--gl-blur-light));-webkit-backdrop-filter:blur(var(--gl-blur-light));border:1px solid var(--gl-border-subtle);color:var(--gl-color-text-muted);box-shadow:0 4px 12px rgba(0,0,0,.1),var(--gl-inset-subtle)}.glass-btn--tertiary svg{fill:none;stroke:var(--gl-icon-on-tertiary);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.glass-btn--tertiary:hover{background:var(--gl-surface-4);color:var(--gl-color-text);transform:translateY(-1px)}.glass-btn--tertiary:active{transform:translateY(1px)}.glass-btn--sm{height:44px;font-size:var(--gl-font-size-sm);border-radius:var(--gl-radius-sm)}.glass-btn--lg{height:64px;font-size:var(--gl-font-size-lg)}.glass-btn--auto{width:auto;padding:0 var(--gl-space-xl)}.glass-status{background:var(--gl-surface-1);backdrop-filter:blur(var(--gl-blur-light));-webkit-backdrop-filter:blur(var(--gl-blur-light));border:1px solid var(--gl-border-subtle);border-radius:var(--gl-radius-btn);padding:var(--gl-space-md) var(--gl-space-lg);display:flex;align-items:center;gap:var(--gl-space-sm);box-shadow:0 4px 12px rgba(0,0,0,.08),var(--gl-inset-subtle)}.glass-status svg{width:20px;height:20px;flex-shrink:0;stroke:var(--gl-icon-muted);stroke-width:2;fill:none;stroke-linecap:round;stroke-linejoin:round}.glass-status p{color:var(--gl-color-text-muted);font-size:var(--gl-font-size-sm);font-weight:var(--gl-font-weight-normal);line-height:1.45}.glass-input-group{display:flex;flex-direction:column;gap:var(--gl-space-xs)}.glass-label{font-size:var(--gl-font-size-sm);font-weight:var(--gl-font-weight-medium);color:var(--gl-icon-strong);padding-left:var(--gl-space-2xs)}.glass-input{width:100%;height:52px;padding:0 var(--gl-space-md);background:var(--gl-surface-2);backdrop-filter:blur(var(--gl-blur-light));-webkit-backdrop-filter:blur(var(--gl-blur-light));border:1.5px solid var(--gl-border-medium);border-radius:var(--gl-radius-input);color:var(--gl-color-text);font-family:var(--gl-font-family);font-size:var(--gl-font-size-base);transition:var(--gl-transition);outline:0;box-shadow:var(--gl-inset-subtle);-webkit-tap-highlight-color:transparent}.glass-input::placeholder{color:var(--gl-placeholder)}.glass-input:focus{border-color:var(--gl-border-focus);background:var(--gl-surface-3);box-shadow:var(--gl-shadow-focus),var(--gl-inset-medium)}.glass-input:disabled{opacity:.4;cursor:not-allowed}.glass-input--error{border-color:var(--gl-color-error)}.glass-input--error:focus{box-shadow:0 0 0 3px rgba(255,59,48,.25),var(--gl-inset-medium)}.glass-hint{font-size:var(--gl-font-size-xs);color:var(--gl-color-text-muted);padding-left:var(--gl-space-2xs)}.glass-hint--error{color:var(--gl-color-error)}.glass-textarea{width:100%;min-height:120px;padding:var(--gl-space-md);background:var(--gl-surface-2);backdrop-filter:blur(var(--gl-blur-light));-webkit-backdrop-filter:blur(var(--gl-blur-light));border:1.5px solid var(--gl-border-medium);border-radius:var(--gl-radius-input);color:var(--gl-color-text);font-family:var(--gl-font-family);font-size:var(--gl-font-size-base);line-height:1.5;resize:vertical;transition:var(--gl-transition);outline:0;box-shadow:var(--gl-inset-subtle)}.glass-textarea::placeholder{color:var(--gl-placeholder)}.glass-textarea:focus{border-color:var(--gl-border-focus);background:var(--gl-surface-3);box-shadow:var(--gl-shadow-focus),var(--gl-inset-medium)}.glass-select{width:100%;height:52px;padding:0 var(--gl-space-3xl) 0 var(--gl-space-md);background:var(--gl-surface-2);backdrop-filter:blur(var(--gl-blur-light));-webkit-backdrop-filter:blur(var(--gl-blur-light));border:1.5px solid var(--gl-border-medium);border-radius:var(--gl-radius-input);color:var(--gl-color-text);font-family:var(--gl-font-family);font-size:var(--gl-font-size-base);transition:var(--gl-transition);outline:0;box-shadow:var(--gl-inset-subtle);cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='rgba(255,255,255,0.6)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 16px center}.glass-select:focus{border-color:var(--gl-border-focus);box-shadow:var(--gl-shadow-focus),var(--gl-inset-medium)}.glass-select option{background:var(--gl-color-bg-mid);color:var(--gl-color-text)}.glass-search{position:relative;display:flex;align-items:center}.glass-search__icon{position:absolute;left:var(--gl-space-md);width:18px;height:18px;stroke:var(--gl-icon-muted)!important;stroke-width:2!important;stroke-linecap:round!important;stroke-linejoin:round!important;fill:none!important;pointer-events:none;z-index:2}.glass-search .glass-input{padding-left:44px;border-radius:var(--gl-radius-full)}.glass-toggle{display:inline-flex;align-items:center;gap:var(--gl-space-sm);cursor:pointer;-webkit-tap-highlight-color:transparent}.glass-toggle__input{position:absolute;opacity:0;width:0;height:0}.glass-toggle__track{position:relative;width:52px;height:30px;background:var(--gl-surface-2);backdrop-filter:blur(var(--gl-blur-soft));-webkit-backdrop-filter:blur(var(--gl-blur-soft));border:1.5px solid var(--gl-border-medium);border-radius:var(--gl-radius-full);transition:var(--gl-transition);box-shadow:var(--gl-inset-subtle);flex-shrink:0}.glass-toggle__thumb{position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:var(--gl-radius-pill);background:var(--gl-toggle-thumb-bg);box-shadow:0 2px 6px rgba(0,0,0,.2),var(--gl-inset-milk);transition:var(--gl-transition)}.glass-toggle__input:checked+.glass-toggle__track{background:linear-gradient(135deg,var(--gl-color-primary) 0,var(--gl-color-primary-dark) 100%);border-color:var(--gl-border-warm)}.glass-toggle__input:checked+.glass-toggle__track .glass-toggle__thumb{transform:translateX(22px)}.glass-toggle__input:focus-visible+.glass-toggle__track{box-shadow:var(--gl-shadow-focus)}.glass-toggle__label{font-size:var(--gl-font-size-base);color:var(--gl-color-text);user-select:none}.glass-checkbox{display:inline-flex;align-items:center;gap:var(--gl-space-sm);cursor:pointer;-webkit-tap-highlight-color:transparent}.glass-checkbox__input{position:absolute;opacity:0;width:0;height:0}.glass-checkbox__box{width:24px;height:24px;border-radius:var(--gl-radius-xs);background:var(--gl-surface-2);backdrop-filter:blur(var(--gl-blur-soft));-webkit-backdrop-filter:blur(var(--gl-blur-soft));border:1.5px solid var(--gl-border-medium);display:flex;align-items:center;justify-content:center;transition:var(--gl-transition);box-shadow:var(--gl-inset-subtle);flex-shrink:0}.glass-checkbox__box svg{width:14px;height:14px;stroke:white;stroke-width:3;fill:none;stroke-linecap:round;stroke-linejoin:round;opacity:0;transform:scale(.5);transition:var(--gl-transition-fast)}.glass-checkbox__input:checked+.glass-checkbox__box{background:linear-gradient(135deg,var(--gl-color-primary) 0,var(--gl-color-primary-dark) 100%);border-color:var(--gl-border-warm)}.glass-checkbox__input:checked+.glass-checkbox__box svg{opacity:1;transform:scale(1)}.glass-checkbox__input:focus-visible+.glass-checkbox__box{box-shadow:var(--gl-shadow-focus)}.glass-checkbox__label{font-size:var(--gl-font-size-base);color:var(--gl-color-text);user-select:none}.glass-radio{display:inline-flex;align-items:center;gap:var(--gl-space-sm);cursor:pointer;-webkit-tap-highlight-color:transparent}.glass-radio__input{position:absolute;opacity:0;width:0;height:0}.glass-radio__circle{width:24px;height:24px;border-radius:var(--gl-radius-pill);background:var(--gl-surface-2);backdrop-filter:blur(var(--gl-blur-soft));border:1.5px solid var(--gl-border-medium);display:flex;align-items:center;justify-content:center;transition:var(--gl-transition);box-shadow:var(--gl-inset-subtle);flex-shrink:0}.glass-radio__dot{width:10px;height:10px;border-radius:var(--gl-radius-pill);background:#fff;opacity:0;transform:scale(0);transition:var(--gl-transition-fast)}.glass-radio__input:checked+.glass-radio__circle{background:linear-gradient(135deg,var(--gl-color-primary) 0,var(--gl-color-primary-dark) 100%);border-color:var(--gl-border-warm)}.glass-radio__input:checked+.glass-radio__circle .glass-radio__dot{opacity:1;transform:scale(1)}.glass-radio__input:focus-visible+.glass-radio__circle{box-shadow:var(--gl-shadow-focus)}.glass-radio__label{font-size:var(--gl-font-size-base);color:var(--gl-color-text);user-select:none}.glass-range-group{display:flex;flex-direction:column;gap:var(--gl-space-xs)}.glass-range-header{display:flex;justify-content:space-between;align-items:baseline}.glass-range-value{font-size:var(--gl-font-size-sm);font-weight:var(--gl-font-weight-semibold);color:var(--gl-color-primary);font-variant-numeric:tabular-nums}.glass-range{-webkit-appearance:none;appearance:none;width:100%;height:6px;border-radius:var(--gl-radius-full);background:var(--gl-range-track-bg);border:1px solid var(--gl-range-track-border);outline:0;cursor:pointer}.glass-range::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:26px;height:26px;border-radius:var(--gl-radius-pill);background:linear-gradient(135deg,var(--gl-color-primary) 0,var(--gl-color-primary-dark) 100%);border:2px solid rgba(255,255,255,.5);box-shadow:0 2px 8px rgba(230,130,40,.35),var(--gl-inset-strong);margin-top:-10px;cursor:pointer;transition:var(--gl-transition)}.glass-range::-webkit-slider-thumb:hover{transform:scale(1.1)}.glass-range::-moz-range-thumb{width:26px;height:26px;border-radius:var(--gl-radius-pill);background:linear-gradient(135deg,var(--gl-color-primary) 0,var(--gl-color-primary-dark) 100%);border:2px solid rgba(255,255,255,.5);box-shadow:0 2px 8px rgba(230,130,40,.35);cursor:pointer}.glass-range::-moz-range-track{height:6px;border-radius:var(--gl-radius-full);background:var(--gl-range-track-bg);border:1px solid var(--gl-range-track-border)}.glass-range:focus-visible{box-shadow:var(--gl-shadow-focus)}.glass-progress{width:100%;display:flex;flex-direction:column;gap:var(--gl-space-xs)}.glass-progress__header{display:flex;justify-content:space-between;align-items:baseline}.glass-progress__label{font-size:var(--gl-font-size-sm);font-weight:var(--gl-font-weight-medium);color:var(--gl-icon-strong)}.glass-progress__value{font-size:var(--gl-font-size-xs);font-weight:var(--gl-font-weight-semibold);color:var(--gl-color-text-muted);font-variant-numeric:tabular-nums}.glass-progress__track{width:100%;height:8px;border-radius:var(--gl-radius-full);background:var(--gl-surface-2);border:1px solid var(--gl-border-subtle);overflow:hidden;box-shadow:var(--gl-inset-subtle)}.glass-progress__fill{height:100%;border-radius:var(--gl-radius-full);background:linear-gradient(90deg,var(--gl-color-primary) 0,var(--gl-color-primary-dark) 100%);box-shadow:0 0 8px rgba(245,166,35,.3),var(--gl-inset-strong);transition:width .5s cubic-bezier(.4, 0, .2, 1);position:relative}.glass-progress__fill::after{content:'';position:absolute;top:0;left:0;right:0;height:50%;border-radius:var(--gl-radius-full);background:linear-gradient(to bottom,rgba(255,255,255,.3) 0,transparent 100%)}.glass-progress--sm .glass-progress__track{height:4px}.glass-progress--lg .glass-progress__track{height:12px}.glass-progress--success .glass-progress__fill{background:linear-gradient(90deg,#34c759 0,#2da44e 100%);box-shadow:0 0 8px rgba(52,199,89,.3),var(--gl-inset-strong)}.glass-progress--error .glass-progress__fill{background:linear-gradient(90deg,#ff3b30 0,#d63027 100%);box-shadow:0 0 8px rgba(255,59,48,.3),var(--gl-inset-strong)}.glass-modal-overlay{position:fixed;inset:0;background:var(--gl-surface-overlay);backdrop-filter:blur(var(--gl-blur-soft));-webkit-backdrop-filter:blur(var(--gl-blur-soft));display:flex;align-items:center;justify-content:center;padding:var(--gl-space-lg);z-index:1000;opacity:0;pointer-events:none;transition:var(--gl-transition-modal);font-family:var(--gl-font-family);-webkit-font-smoothing:antialiased}.glass-modal-overlay.is-active{opacity:1;pointer-events:auto}.glass-modal{width:100%;max-width:340px;background:linear-gradient(to bottom,var(--gl-card-glow-top) 0,var(--gl-card-glow-bottom) 100%);backdrop-filter:blur(var(--gl-blur-heavy));-webkit-backdrop-filter:blur(var(--gl-blur-heavy));border:1.5px solid var(--gl-border-medium);border-radius:var(--gl-radius-card);overflow:hidden;box-shadow:var(--gl-shadow-modal);transform:scale(.9) translateY(20px);transition:var(--gl-transition-modal);position:relative}.glass-modal-overlay.is-active .glass-modal{transform:scale(1) translateY(0)}.glass-modal::before{content:'';position:absolute;top:0;left:10%;right:10%;height:1px;background:linear-gradient(90deg,transparent 0,rgba(255,255,255,.4) 30%,rgba(255,255,255,.5) 50%,rgba(255,255,255,.4) 70%,transparent 100%)}.glass-modal__header{padding:var(--gl-space-xl) var(--gl-space-xl) var(--gl-space-sm);text-align:center}.glass-modal__title{font-size:var(--gl-font-size-modal);font-weight:var(--gl-font-weight-semibold);color:var(--gl-color-text)}.glass-modal__body{padding:var(--gl-space-sm) var(--gl-space-xl) var(--gl-space-xl);text-align:center}.glass-modal__body p{color:var(--gl-color-text-muted);font-size:var(--gl-font-size-base);line-height:1.55}.glass-modal__footer{display:flex;border-top:1px solid var(--gl-border-subtle)}.glass-modal__action{flex:1;height:52px;background:0 0;border:none;font-family:var(--gl-font-family);font-size:var(--gl-font-size-btn);font-weight:var(--gl-font-weight-medium);color:var(--gl-color-text-muted);cursor:pointer;transition:var(--gl-transition-fast);outline:0}.glass-modal__action:hover{background:var(--gl-surface-1)}.glass-modal__action+.glass-modal__action{border-left:1px solid var(--gl-border-subtle)}.glass-modal__action--primary{color:var(--gl-color-primary);font-weight:var(--gl-font-weight-semibold)}.glass-modal__action--danger{color:var(--gl-color-error);font-weight:var(--gl-font-weight-semibold)}.glass-toast{position:fixed;top:var(--gl-space-4xl);left:50%;transform:translateX(-50%) translateY(-20px);min-width:280px;max-width:340px;padding:var(--gl-space-md) var(--gl-space-lg);background:linear-gradient(to bottom,var(--gl-surface-4) 0,var(--gl-surface-2) 100%);backdrop-filter:blur(var(--gl-blur));-webkit-backdrop-filter:blur(var(--gl-blur));border:1px solid var(--gl-border-medium);border-radius:var(--gl-radius-btn);display:flex;align-items:center;gap:var(--gl-space-sm);box-shadow:var(--gl-shadow-toast),var(--gl-inset-medium);z-index:1100;opacity:0;pointer-events:none;transition:var(--gl-transition-modal);font-family:var(--gl-font-family);-webkit-font-smoothing:antialiased}.glass-toast.is-visible{opacity:1;transform:translateX(-50%) translateY(0);pointer-events:auto}.glass-toast__icon{width:22px;height:22px;flex-shrink:0;stroke-width:2;fill:none;stroke-linecap:round;stroke-linejoin:round}.glass-toast--success .glass-toast__icon{stroke:var(--gl-color-success)}.glass-toast--error .glass-toast__icon{stroke:var(--gl-color-error)}.glass-toast--warning .glass-toast__icon{stroke:var(--gl-color-warning)}.glass-toast__text{font-size:var(--gl-font-size-sm);font-weight:var(--gl-font-weight-medium);color:var(--gl-color-text);line-height:1.4}.glass-tab-bar{position:fixed;bottom:0;left:0;right:0;height:var(--gl-tab-bar-height);background:linear-gradient(to bottom,var(--gl-surface-3) 0,var(--gl-surface-1) 100%);backdrop-filter:blur(var(--gl-blur));-webkit-backdrop-filter:blur(var(--gl-blur));border-top:1px solid var(--gl-border-subtle);display:flex;justify-content:space-around;align-items:flex-start;padding-top:var(--gl-space-xs);padding-bottom:env(safe-area-inset-bottom,8px);z-index:900;box-shadow:0 -4px 20px rgba(0,0,0,.08),var(--gl-inset-subtle)}.glass-tab-bar__item{display:flex;flex-direction:column;align-items:center;gap:var(--gl-space-2xs);padding:var(--gl-space-2xs) var(--gl-space-sm);background:0 0;border:none;cursor:pointer;transition:var(--gl-transition);outline:0;-webkit-tap-highlight-color:transparent;min-width:60px}.glass-tab-bar__icon{width:24px;height:24px;display:flex;align-items:center;justify-content:center;position:relative}.glass-tab-bar__icon svg{width:24px;height:24px;fill:none;stroke:var(--gl-icon-muted);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;transition:var(--gl-transition)}.glass-tab-bar__label{font-size:10px;font-weight:var(--gl-font-weight-medium);color:var(--gl-icon-muted);transition:var(--gl-transition);letter-spacing:.2px}.glass-tab-bar__item.is-active .glass-tab-bar__icon svg{stroke:var(--gl-color-primary);filter:drop-shadow(0 0 6px rgba(245,166,35,.35))}.glass-tab-bar__item.is-active .glass-tab-bar__label{color:var(--gl-color-primary)}.glass-tab-bar__item.is-active .glass-tab-bar__icon::after{content:'';position:absolute;bottom:-6px;left:50%;transform:translateX(-50%);width:4px;height:4px;border-radius:var(--gl-radius-pill);background:var(--gl-color-primary);box-shadow:0 0 6px rgba(245,166,35,.5)}.glass-tab-bar__item:not(.is-active):hover .glass-tab-bar__icon svg{stroke:var(--gl-icon-default)}.glass-tab-bar__item:not(.is-active):hover .glass-tab-bar__label{color:var(--gl-icon-default)}.glass-tab-bar__badge{position:absolute;top:-4px;right:-8px;min-width:16px;height:16px;padding:0 4px;border-radius:var(--gl-radius-full);background:var(--gl-color-error);color:#fff;font-size:10px;font-weight:var(--gl-font-weight-semibold);display:flex;align-items:center;justify-content:center;box-shadow:0 2px 6px rgba(255,59,48,.4)}.glass-accordion{display:flex;flex-direction:column;gap:var(--gl-space-xs)}.glass-accordion__item{background:var(--gl-surface-2);backdrop-filter:blur(var(--gl-blur-light));-webkit-backdrop-filter:blur(var(--gl-blur-light));border:1px solid var(--gl-border-subtle);border-radius:var(--gl-radius-btn);overflow:hidden;transition:var(--gl-transition);box-shadow:var(--gl-inset-subtle)}.glass-accordion__item.is-open{background:var(--gl-surface-3);border-color:var(--gl-border-medium);box-shadow:0 4px 16px rgba(0,0,0,.1),var(--gl-inset-medium)}.glass-accordion__trigger{width:100%;display:flex;align-items:center;justify-content:space-between;gap:var(--gl-space-sm);padding:var(--gl-space-md) var(--gl-space-lg);background:0 0;border:none;cursor:pointer;font-family:var(--gl-font-family);font-size:var(--gl-font-size-base);font-weight:var(--gl-font-weight-semibold);color:var(--gl-color-text);text-align:left;outline:0;transition:var(--gl-transition);-webkit-tap-highlight-color:transparent}.glass-accordion__trigger:hover{color:var(--gl-color-primary)}.glass-accordion__trigger-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0}.glass-accordion__trigger-icon svg{width:18px;height:18px;fill:none;stroke:var(--gl-icon-default);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:transform .3s cubic-bezier(.4, 0, .2, 1)}.glass-accordion__item.is-open .glass-accordion__trigger-icon svg{transform:rotate(180deg);stroke:var(--gl-color-primary)}.glass-accordion__content{max-height:0;overflow:hidden;transition:max-height .35s cubic-bezier(.4, 0, .2, 1)}.glass-accordion__item.is-open .glass-accordion__content{max-height:500px}.glass-accordion__body{padding:0 var(--gl-space-lg) var(--gl-space-lg);color:var(--gl-accordion-body-color);font-size:var(--gl-font-size-sm);line-height:1.6}.glass-badge{display:inline-flex;align-items:center;gap:var(--gl-space-2xs);padding:var(--gl-space-2xs) var(--gl-space-sm);background:var(--gl-surface-3);backdrop-filter:blur(var(--gl-blur-soft));-webkit-backdrop-filter:blur(var(--gl-blur-soft));border:1px solid var(--gl-border-subtle);border-radius:var(--gl-radius-full);font-size:var(--gl-font-size-xs);font-weight:var(--gl-font-weight-medium);color:var(--gl-color-text);box-shadow:var(--gl-inset-subtle)}.glass-badge--primary{background:linear-gradient(135deg,rgba(245,166,35,.25) 0,rgba(212,105,42,.2) 100%);border-color:var(--gl-border-warm);color:var(--gl-color-primary)}.glass-badge--success{background:rgba(52,199,89,.15);border-color:rgba(52,199,89,.3);color:var(--gl-color-success)}.glass-badge--error{background:rgba(255,59,48,.15);border-color:rgba(255,59,48,.3);color:var(--gl-color-error)}.glass-divider{height:1px;border:none;background:linear-gradient(90deg,transparent 0,var(--gl-border-subtle) 20%,var(--gl-border-medium) 50%,var(--gl-border-subtle) 80%,transparent 100%)}.glass-avatar{width:44px;height:44px;border-radius:var(--gl-radius-pill);background:var(--gl-surface-3);backdrop-filter:blur(var(--gl-blur-soft));-webkit-backdrop-filter:blur(var(--gl-blur-soft));border:1.5px solid var(--gl-border-strong);display:flex;align-items:center;justify-content:center;overflow:hidden;box-shadow:var(--gl-shadow-glow),var(--gl-inset-medium);flex-shrink:0;font-size:var(--gl-font-size-btn);font-weight:var(--gl-font-weight-semibold);color:var(--gl-color-text)}.glass-avatar img{width:100%;height:100%;object-fit:cover}.glass-avatar--sm{width:32px;height:32px;font-size:var(--gl-font-size-xs)}.glass-avatar--lg{width:56px;height:56px;font-size:var(--gl-font-size-lg)}.glass-theme-toggle{width:46px;height:46px;border-radius:var(--gl-radius-pill);background:var(--gl-surface-3);backdrop-filter:blur(var(--gl-blur));-webkit-backdrop-filter:blur(var(--gl-blur));border:1.5px solid var(--gl-border-strong);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:var(--gl-transition);box-shadow:var(--gl-shadow-glow),var(--gl-inset-medium);outline:0;-webkit-tap-highlight-color:transparent}.glass-theme-toggle:hover{background:var(--gl-surface-5);transform:scale(1.05)}.glass-theme-toggle:active{transform:scale(.95)}.glass-theme-toggle svg{width:20px;height:20px;fill:none;stroke:var(--gl-color-text);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.glass-theme-toggle .icon-sun{display:none}.glass-theme-toggle .icon-moon,[data-theme=light] .glass-theme-toggle .icon-sun{display:block}[data-theme=light] .glass-theme-toggle .icon-moon{display:none}.gl-stack{display:flex;flex-direction:column}.gl-row{display:flex;flex-direction:row;align-items:center}.gl-stack--2xs{gap:var(--gl-space-2xs)}.gl-stack--xs{gap:var(--gl-space-xs)}.gl-stack--sm{gap:var(--gl-space-sm)}.gl-stack--md{gap:var(--gl-space-md)}.gl-stack--lg{gap:var(--gl-space-lg)}.gl-stack--xl{gap:var(--gl-space-xl)}.gl-row--xs{gap:var(--gl-space-xs)}.gl-row--sm{gap:var(--gl-space-sm)}.gl-row--md{gap:var(--gl-space-md)}.gl-text-center{text-align:center}.gl-text-muted{color:var(--gl-color-text-muted)}.gl-text-sm{font-size:var(--gl-font-size-sm)}.gl-mt-sm{margin-top:var(--gl-space-sm)}.gl-mt-md{margin-top:var(--gl-space-md)}.gl-mt-lg{margin-top:var(--gl-space-lg)}.gl-mt-xl{margin-top:var(--gl-space-xl)}.gl-mb-sm{margin-bottom:var(--gl-space-sm)}.gl-mb-md{margin-bottom:var(--gl-space-md)}.gl-mb-lg{margin-bottom:var(--gl-space-lg)}.gl-mb-xl{margin-bottom:var(--gl-space-xl)}.gl-px{padding-left:var(--gl-space-lg);padding-right:var(--gl-space-lg)}.gl-w-full{width:100%}.gl-flex-1{flex:1}\n/*# sourceMappingURL=glasskit.min.css.map */";
|
package/glasskit.css
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jungherz-de/glasskit",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.3",
|
|
4
4
|
"description": "A modern glassmorphism CSS component library – inspired by iOS 26 Liquid Glass. 22 components, dark & light mode, no dependencies.",
|
|
5
5
|
"main": "glasskit.css",
|
|
6
6
|
"style": "glasskit.css",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"type": "git",
|
|
38
38
|
"url": "git+https://github.com/JUNGHERZ/GlassKit.git"
|
|
39
39
|
},
|
|
40
|
-
"homepage": "https://
|
|
40
|
+
"homepage": "https://glasskit.jungherz.com",
|
|
41
41
|
"bugs": {
|
|
42
42
|
"url": "https://github.com/JUNGHERZ/GlassKit/issues"
|
|
43
43
|
},
|