@jaimevalasek/aioson 1.30.1 → 1.30.2
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 +9 -0
- package/docs/design-previews/cognitive-core-ui-auth.html +95 -0
- package/docs/design-previews/cognitive-core-ui-kanban.html +231 -0
- package/docs/design-previews/cognitive-core-ui-list-detail.html +174 -0
- package/docs/design-previews/cognitive-core-ui-preview.css +1315 -0
- package/docs/design-previews/cognitive-core-ui-settings.html +142 -0
- package/docs/design-previews/cognitive-core-ui-website.html +190 -1009
- package/docs/design-previews/cognitive-core-ui.html +281 -463
- package/docs/design-previews/index.html +83 -31
- package/package.json +1 -1
- package/src/constants.js +567 -511
- package/template/.aioson/docs/play/README.md +2 -0
- package/template/.aioson/docs/play/agent-usage-guide.md +7 -1
- package/template/.aioson/docs/play/app-compatibility-guide.md +6 -1
- package/template/.aioson/docs/play/auth-services-and-testing.md +16 -1
- package/template/.aioson/docs/play/manifest-and-runtime.md +23 -0
- package/template/.aioson/skills/design/aurora-command-ui/SKILL.md +266 -243
- package/template/.aioson/skills/design/aurora-command-ui/references/art-direction.md +293 -293
- package/template/.aioson/skills/design/aurora-command-ui/references/components.md +827 -827
- package/template/.aioson/skills/design/aurora-command-ui/references/dashboards.md +250 -250
- package/template/.aioson/skills/design/aurora-command-ui/references/design-tokens.md +585 -585
- package/template/.aioson/skills/design/aurora-command-ui/references/motion.md +365 -365
- package/template/.aioson/skills/design/aurora-command-ui/references/patterns.md +485 -482
- package/template/.aioson/skills/design/aurora-command-ui/references/websites.md +386 -387
- package/template/.aioson/skills/design/bold-editorial-ui/SKILL.md +228 -205
- package/template/.aioson/skills/design/bold-editorial-ui/references/art-direction.md +338 -338
- package/template/.aioson/skills/design/bold-editorial-ui/references/components.md +977 -977
- package/template/.aioson/skills/design/bold-editorial-ui/references/dashboards.md +218 -218
- package/template/.aioson/skills/design/bold-editorial-ui/references/design-tokens.md +326 -326
- package/template/.aioson/skills/design/bold-editorial-ui/references/motion.md +461 -461
- package/template/.aioson/skills/design/bold-editorial-ui/references/patterns.md +293 -293
- package/template/.aioson/skills/design/bold-editorial-ui/references/websites.md +352 -352
- package/template/.aioson/skills/design/clean-saas-ui/SKILL.md +233 -210
- package/template/.aioson/skills/design/clean-saas-ui/references/art-direction.md +319 -319
- package/template/.aioson/skills/design/clean-saas-ui/references/components.md +365 -365
- package/template/.aioson/skills/design/clean-saas-ui/references/dashboards.md +196 -196
- package/template/.aioson/skills/design/clean-saas-ui/references/design-tokens.md +244 -244
- package/template/.aioson/skills/design/clean-saas-ui/references/motion.md +235 -235
- package/template/.aioson/skills/design/clean-saas-ui/references/patterns.md +215 -215
- package/template/.aioson/skills/design/clean-saas-ui/references/websites.md +295 -295
- package/template/.aioson/skills/design/cognitive-core-ui/SKILL.md +239 -203
- package/template/.aioson/skills/design/cognitive-core-ui/references/art-direction.md +339 -339
- package/template/.aioson/skills/design/cognitive-core-ui/references/components.md +417 -407
- package/template/.aioson/skills/design/cognitive-core-ui/references/dashboards.md +289 -272
- package/template/.aioson/skills/design/cognitive-core-ui/references/design-tokens.md +525 -524
- package/template/.aioson/skills/design/cognitive-core-ui/references/motion.md +279 -279
- package/template/.aioson/skills/design/cognitive-core-ui/references/patterns.md +355 -289
- package/template/.aioson/skills/design/cognitive-core-ui/references/websites.md +443 -437
- package/template/.aioson/skills/design/glassmorphism-ui/SKILL.md +245 -222
- package/template/.aioson/skills/design/glassmorphism-ui/references/art-direction.md +159 -159
- package/template/.aioson/skills/design/glassmorphism-ui/references/components.md +498 -498
- package/template/.aioson/skills/design/glassmorphism-ui/references/dashboards.md +236 -236
- package/template/.aioson/skills/design/glassmorphism-ui/references/design-tokens.md +274 -274
- package/template/.aioson/skills/design/glassmorphism-ui/references/motion.md +355 -355
- package/template/.aioson/skills/design/glassmorphism-ui/references/patterns.md +198 -198
- package/template/.aioson/skills/design/glassmorphism-ui/references/websites.md +307 -307
- package/template/.aioson/skills/design/interface-design/SKILL.md +68 -47
- package/template/.aioson/skills/design/interface-design/references/components-and-states.md +105 -105
- package/template/.aioson/skills/design/interface-design/references/design-directions.md +101 -101
- package/template/.aioson/skills/design/interface-design/references/handoff-and-quality.md +92 -71
- package/template/.aioson/skills/design/interface-design/references/intent-and-domain.md +74 -74
- package/template/.aioson/skills/design/interface-design/references/tokens-and-depth.md +173 -173
- package/template/.aioson/skills/design/neo-brutalist-ui/SKILL.md +236 -213
- package/template/.aioson/skills/design/neo-brutalist-ui/references/art-direction.md +228 -228
- package/template/.aioson/skills/design/neo-brutalist-ui/references/components.md +855 -855
- package/template/.aioson/skills/design/neo-brutalist-ui/references/dashboards.md +334 -334
- package/template/.aioson/skills/design/neo-brutalist-ui/references/design-tokens.md +342 -342
- package/template/.aioson/skills/design/neo-brutalist-ui/references/motion.md +286 -286
- package/template/.aioson/skills/design/neo-brutalist-ui/references/patterns.md +458 -458
- package/template/.aioson/skills/design/neo-brutalist-ui/references/websites.md +723 -723
- package/template/.aioson/skills/design/premium-command-center-ui/SKILL.md +83 -62
- package/template/.aioson/skills/design/premium-command-center-ui/references/operations.md +74 -74
- package/template/.aioson/skills/design/premium-command-center-ui/references/patterns.md +116 -116
- package/template/.aioson/skills/design/premium-command-center-ui/references/validation.md +47 -47
- package/template/.aioson/skills/design/premium-command-center-ui/references/visual-system.md +215 -215
- package/template/.aioson/skills/design/pt.squarespace.com/.skill-meta.json +31 -31
- package/template/.aioson/skills/design/pt.squarespace.com/SKILL.md +94 -66
- package/template/.aioson/skills/design/pt.squarespace.com/references/components.md +366 -366
- package/template/.aioson/skills/design/pt.squarespace.com/references/design-tokens.md +150 -150
- package/template/.aioson/skills/design/pt.squarespace.com/references/motion.md +270 -270
- package/template/.aioson/skills/design/pt.squarespace.com/references/patterns.md +189 -189
- package/template/.aioson/skills/design/pt.squarespace.com/references/websites.md +161 -161
- package/template/.aioson/skills/design/warm-craft-ui/SKILL.md +232 -209
- package/template/.aioson/skills/design/warm-craft-ui/references/art-direction.md +324 -324
- package/template/.aioson/skills/design/warm-craft-ui/references/components.md +508 -508
- package/template/.aioson/skills/design/warm-craft-ui/references/dashboards.md +223 -223
- package/template/.aioson/skills/design/warm-craft-ui/references/design-tokens.md +374 -374
- package/template/.aioson/skills/design/warm-craft-ui/references/motion.md +356 -356
- package/template/.aioson/skills/design/warm-craft-ui/references/patterns.md +288 -288
- package/template/.aioson/skills/design/warm-craft-ui/references/websites.md +289 -289
|
@@ -1,355 +1,355 @@
|
|
|
1
|
-
# Motion — Glassmorphism UI
|
|
2
|
-
|
|
3
|
-
Animation and transition specifications. Glass motion is defined by blur transitions, opacity shifts, and fluid easing — not bounce or spring.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Principles
|
|
8
|
-
|
|
9
|
-
- **Fluid**: movements smooth as a surface of water. Generous ease-out, never bounce, never overshoot.
|
|
10
|
-
- **Layered**: animations respect the depth layers — elements closer to the user animate faster than those further away. Cards animate faster than the background gradient.
|
|
11
|
-
- **Luminous**: opacity and blur transitions are first-class citizens (not just position/scale). The "frosting" of a surface appearing or disappearing is a core motion type.
|
|
12
|
-
- **Effortless**: nothing should look like it is "trying". Natural movements, no dramatic entrances unless the product is explicitly theatrical (media player, landing hero).
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## Timing Tokens
|
|
17
|
-
|
|
18
|
-
```css
|
|
19
|
-
--transition-fast: 120ms ease;
|
|
20
|
-
--transition-base: 200ms ease;
|
|
21
|
-
--transition-slow: 350ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
22
|
-
--transition-glass: backdrop-filter 300ms ease,
|
|
23
|
-
background 300ms ease,
|
|
24
|
-
border-color 300ms ease,
|
|
25
|
-
box-shadow 300ms ease;
|
|
26
|
-
--transition-hero: 600ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
`cubic-bezier(0.16, 1, 0.3, 1)` is the smooth deceleration curve — fast start, elegant stop. Use it for entrances and meaningful state changes. Use `ease` for hover/micro-interactions.
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## Entrance Animations
|
|
34
|
-
|
|
35
|
-
### 1. Glass Fade In
|
|
36
|
-
Card appears as if condensing from air — opacity and blur materialize simultaneously.
|
|
37
|
-
|
|
38
|
-
```css
|
|
39
|
-
@keyframes glass-fade-in {
|
|
40
|
-
from {
|
|
41
|
-
opacity: 0;
|
|
42
|
-
backdrop-filter: blur(0px);
|
|
43
|
-
}
|
|
44
|
-
to {
|
|
45
|
-
opacity: 1;
|
|
46
|
-
backdrop-filter: var(--glass-blur-md);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
.glass-fade-in {
|
|
50
|
-
animation: glass-fade-in 400ms ease-out forwards;
|
|
51
|
-
}
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
Use for: initial page load of glass cards, modal appearance.
|
|
55
|
-
|
|
56
|
-
### 2. Float Up
|
|
57
|
-
Card floats up and materializes — the primary entrance for dashboards and stagger lists.
|
|
58
|
-
|
|
59
|
-
```css
|
|
60
|
-
@keyframes float-up {
|
|
61
|
-
from {
|
|
62
|
-
opacity: 0;
|
|
63
|
-
transform: translateY(16px);
|
|
64
|
-
backdrop-filter: blur(0px);
|
|
65
|
-
}
|
|
66
|
-
to {
|
|
67
|
-
opacity: 1;
|
|
68
|
-
transform: translateY(0);
|
|
69
|
-
backdrop-filter: var(--glass-blur-md);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
.float-up {
|
|
73
|
-
animation: float-up 450ms cubic-bezier(0.16, 1, 0.3, 1) forwards;
|
|
74
|
-
}
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
Use for: dashboard cards on load, stagger card groups, stat cards appearing.
|
|
78
|
-
|
|
79
|
-
### 3. Scale Materialize
|
|
80
|
-
Element scales up from 95% and solidifies — for modals, dropdowns, and menus.
|
|
81
|
-
|
|
82
|
-
```css
|
|
83
|
-
@keyframes scale-materialize {
|
|
84
|
-
from {
|
|
85
|
-
opacity: 0;
|
|
86
|
-
transform: scale(0.95);
|
|
87
|
-
backdrop-filter: blur(0px);
|
|
88
|
-
}
|
|
89
|
-
to {
|
|
90
|
-
opacity: 1;
|
|
91
|
-
transform: scale(1);
|
|
92
|
-
backdrop-filter: var(--glass-blur-lg);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
.scale-materialize {
|
|
96
|
-
animation: scale-materialize 350ms cubic-bezier(0.16, 1, 0.3, 1) forwards;
|
|
97
|
-
}
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
Use for: modal open, dropdown menu, context menu, tooltip appearance.
|
|
101
|
-
|
|
102
|
-
### 4. Glass Slide
|
|
103
|
-
Slides in from a direction and materializes — for drawers, panels, and side sheets.
|
|
104
|
-
|
|
105
|
-
```css
|
|
106
|
-
@keyframes glass-slide-right {
|
|
107
|
-
from {
|
|
108
|
-
opacity: 0;
|
|
109
|
-
transform: translateX(-20px);
|
|
110
|
-
backdrop-filter: blur(0px);
|
|
111
|
-
}
|
|
112
|
-
to {
|
|
113
|
-
opacity: 1;
|
|
114
|
-
transform: translateX(0);
|
|
115
|
-
backdrop-filter: var(--glass-blur-lg);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
@keyframes glass-slide-up {
|
|
119
|
-
from {
|
|
120
|
-
opacity: 0;
|
|
121
|
-
transform: translateY(20px);
|
|
122
|
-
backdrop-filter: blur(0px);
|
|
123
|
-
}
|
|
124
|
-
to {
|
|
125
|
-
opacity: 1;
|
|
126
|
-
transform: translateY(0);
|
|
127
|
-
backdrop-filter: var(--glass-blur-lg);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
Use for: sidebar opening (slide-right), bottom sheet (slide-up on mobile), toast notifications (slide-up from bottom-right).
|
|
133
|
-
|
|
134
|
-
### 5.
|
|
135
|
-
Background
|
|
136
|
-
|
|
137
|
-
```css
|
|
138
|
-
@keyframes
|
|
139
|
-
from {
|
|
140
|
-
opacity: 0;
|
|
141
|
-
transform: scale(0.8);
|
|
142
|
-
}
|
|
143
|
-
to {
|
|
144
|
-
opacity: 0.45;
|
|
145
|
-
transform: scale(1);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
.
|
|
149
|
-
animation:
|
|
150
|
-
}
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
Use for:
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## Glass-Specific Animations
|
|
158
|
-
|
|
159
|
-
### 1. Blur Shift (nav on scroll)
|
|
160
|
-
Navigation glass becomes more opaque and blurred as the user scrolls — structural, not decorative.
|
|
161
|
-
|
|
162
|
-
```css
|
|
163
|
-
/* Applied via JS, toggling a class based on scrollY */
|
|
164
|
-
.nav-bar {
|
|
165
|
-
background: var(--glass-bg);
|
|
166
|
-
transition: var(--transition-glass);
|
|
167
|
-
}
|
|
168
|
-
.nav-bar.scrolled {
|
|
169
|
-
background: var(--glass-bg-hover);
|
|
170
|
-
}
|
|
171
|
-
.nav-bar.deep-scrolled {
|
|
172
|
-
background: var(--glass-bg-active);
|
|
173
|
-
}
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
Breakpoints: `scrollY > 20` → scrolled, `scrollY > 80` → deep-scrolled.
|
|
177
|
-
|
|
178
|
-
### 2. Opacity Frost (card hover)
|
|
179
|
-
The card's glass becomes more opaque on hover — the primary hover behavior for all glass cards.
|
|
180
|
-
|
|
181
|
-
```css
|
|
182
|
-
.glass-card {
|
|
183
|
-
background: var(--glass-bg);
|
|
184
|
-
box-shadow: var(--shadow-sm), var(--shadow-inner);
|
|
185
|
-
transition: var(--transition-glass);
|
|
186
|
-
}
|
|
187
|
-
.glass-card:hover {
|
|
188
|
-
background: var(--glass-bg-hover);
|
|
189
|
-
box-shadow: var(--shadow-md), var(--shadow-inner);
|
|
190
|
-
}
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
Duration: 200ms — fast enough to feel responsive, slow enough to feel smooth.
|
|
194
|
-
|
|
195
|
-
### 3. Glow Pulse (featured/highlighted elements)
|
|
196
|
-
Subtle accent glow pulsing for featured cards, stat heroes, and highlighted elements.
|
|
197
|
-
|
|
198
|
-
```css
|
|
199
|
-
@keyframes glow-pulse {
|
|
200
|
-
0%, 100% { box-shadow: var(--shadow-md), 0 0 20px rgba(124, 58, 237, 0.10); }
|
|
201
|
-
50% { box-shadow: var(--shadow-md), 0 0 40px rgba(124, 58, 237, 0.20); }
|
|
202
|
-
}
|
|
203
|
-
.glass-card--glow {
|
|
204
|
-
animation: glow-pulse 2s ease-in-out infinite;
|
|
205
|
-
}
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
Use sparingly — only for the 1 "hero" element per screen. Not for every card.
|
|
209
|
-
|
|
210
|
-
### 4. Shimmer (skeleton loaders)
|
|
211
|
-
Gradient light sweeping across glass surface — the loading state for glass components.
|
|
212
|
-
|
|
213
|
-
```css
|
|
214
|
-
@keyframes shimmer {
|
|
215
|
-
to { transform: translateX(100%); }
|
|
216
|
-
}
|
|
217
|
-
.skeleton {
|
|
218
|
-
position: relative;
|
|
219
|
-
overflow: hidden;
|
|
220
|
-
background: var(--glass-bg);
|
|
221
|
-
}
|
|
222
|
-
.skeleton::after {
|
|
223
|
-
content: '';
|
|
224
|
-
position: absolute;
|
|
225
|
-
inset: 0;
|
|
226
|
-
background: linear-gradient(
|
|
227
|
-
90deg,
|
|
228
|
-
transparent 0%,
|
|
229
|
-
rgba(255, 255, 255, 0.10) 50%,
|
|
230
|
-
transparent 100%
|
|
231
|
-
);
|
|
232
|
-
transform: translateX(-100%);
|
|
233
|
-
animation: shimmer 1.5s infinite;
|
|
234
|
-
}
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
### 5. Aurora Shift (animated background — landing only)
|
|
238
|
-
Very slow color hue shift on the aurora gradient background.
|
|
239
|
-
|
|
240
|
-
```css
|
|
241
|
-
@keyframes aurora-shift {
|
|
242
|
-
0% { filter: hue-rotate(0deg); }
|
|
243
|
-
50% { filter: hue-rotate(15deg); }
|
|
244
|
-
100% { filter: hue-rotate(0deg); }
|
|
245
|
-
}
|
|
246
|
-
body[data-aurora] {
|
|
247
|
-
animation: aurora-shift 10s ease-in-out infinite;
|
|
248
|
-
}
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
Constraint: only use on landing pages. Never inside apps or dashboards. Keep cycle slow (8-12s). Intensity very low (max 20deg hue rotation).
|
|
252
|
-
|
|
253
|
-
---
|
|
254
|
-
|
|
255
|
-
## Stagger
|
|
256
|
-
|
|
257
|
-
When animating multiple cards into view simultaneously:
|
|
258
|
-
|
|
259
|
-
- **Delay per item**: 50ms (between warm-craft at 60ms and clean-saas at 40ms)
|
|
260
|
-
- **Maximum stagger group**: 6 items
|
|
261
|
-
- **Default animation**: `float-up` with staggered delay
|
|
262
|
-
- **Implementation**: CSS custom property or inline `animation-delay`
|
|
263
|
-
|
|
264
|
-
```css
|
|
265
|
-
.stagger-item:nth-child(1) { animation-delay: 0ms; }
|
|
266
|
-
.stagger-item:nth-child(2) { animation-delay: 50ms; }
|
|
267
|
-
.stagger-item:nth-child(3) { animation-delay: 100ms; }
|
|
268
|
-
.stagger-item:nth-child(4) { animation-delay: 150ms; }
|
|
269
|
-
.stagger-item:nth-child(5) { animation-delay: 200ms; }
|
|
270
|
-
.stagger-item:nth-child(6) { animation-delay: 250ms; }
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
---
|
|
274
|
-
|
|
275
|
-
## Hover States (summary)
|
|
276
|
-
|
|
277
|
-
| Element | Hover behavior | Duration |
|
|
278
|
-
|---------|---------------|----------|
|
|
279
|
-
| Glass Card | `glass-bg` → `glass-bg-hover` + `shadow-sm` → `shadow-md` | 200ms |
|
|
280
|
-
| Primary Button | `brightness(1.05)` + `shadow-sm` → `shadow-md` | 120ms |
|
|
281
|
-
| Glass Button | `glass-bg` → `glass-bg-hover` | 120ms |
|
|
282
|
-
| Nav items (sidebar) | `transparent` → `glass-bg-hover` | 150ms |
|
|
283
|
-
| Nav links (website) | `text-secondary` → `text-heading` | 150ms |
|
|
284
|
-
| Logo cloud | `grayscale opacity-50` → `color opacity-100` | 200ms |
|
|
285
|
-
| Links | underline opacity `0` → `1` | 150ms |
|
|
286
|
-
| Images in glass frame | `scale(1)` → `scale(1.02)` inside `overflow: hidden` | 300ms |
|
|
287
|
-
|
|
288
|
-
---
|
|
289
|
-
|
|
290
|
-
## Scroll Animations (websites only)
|
|
291
|
-
|
|
292
|
-
###
|
|
293
|
-
|
|
294
|
-
```css
|
|
295
|
-
/* Applied via JS with requestAnimationFrame */
|
|
296
|
-
.
|
|
297
|
-
transform: translateY(calc(var(--scroll-y) * 0.3px));
|
|
298
|
-
}
|
|
299
|
-
```
|
|
300
|
-
Multiplier: 0.3-0.5
|
|
301
|
-
|
|
302
|
-
### Section Reveal
|
|
303
|
-
Glass cards and sections fade up as they enter the viewport:
|
|
304
|
-
```javascript
|
|
305
|
-
const observer = new IntersectionObserver(
|
|
306
|
-
(entries) => entries.forEach(e => {
|
|
307
|
-
if (e.isIntersecting) e.target.classList.add('float-up');
|
|
308
|
-
}),
|
|
309
|
-
{ threshold: 0.1 }
|
|
310
|
-
);
|
|
311
|
-
document.querySelectorAll('.reveal').forEach(el => observer.observe(el));
|
|
312
|
-
```
|
|
313
|
-
Threshold: 0.1 — triggers when 10% of element is visible.
|
|
314
|
-
|
|
315
|
-
### Nav Frost (scroll-triggered)
|
|
316
|
-
Navigation glass increases opacity as scroll position increases — see Blur Shift above.
|
|
317
|
-
|
|
318
|
-
---
|
|
319
|
-
|
|
320
|
-
## Page Transitions
|
|
321
|
-
|
|
322
|
-
| Transition | In | Out |
|
|
323
|
-
|-----------|-----|-----|
|
|
324
|
-
| Route change (SPA) | `glass-fade-in` 350ms + `float-up` 350ms | `opacity` 0, 200ms |
|
|
325
|
-
| Modal open | `scale-materialize` 300ms | `opacity + scale(0.97)` 150ms |
|
|
326
|
-
| Bottom sheet open | `glass-slide-up` 350ms | `glass-slide-up` reversed 250ms |
|
|
327
|
-
| Tab content | `opacity 0→1` 200ms | `opacity 1→0` 150ms |
|
|
328
|
-
| Toast in | `glass-slide-up` 350ms | `opacity 1→0 + translateY(8px)` 200ms |
|
|
329
|
-
| Dropdown open | `scale-materialize` 200ms | `opacity 1→0 + scale(0.97)` 150ms |
|
|
330
|
-
|
|
331
|
-
---
|
|
332
|
-
|
|
333
|
-
## Reduced Motion
|
|
334
|
-
|
|
335
|
-
**Mandatory**: always respect `prefers-reduced-motion: reduce`.
|
|
336
|
-
|
|
337
|
-
```css
|
|
338
|
-
@media (prefers-reduced-motion: reduce) {
|
|
339
|
-
*,
|
|
340
|
-
*::before,
|
|
341
|
-
*::after {
|
|
342
|
-
animation-duration: 0.01ms !important;
|
|
343
|
-
animation-iteration-count: 1 !important;
|
|
344
|
-
transition-duration: 0.01ms !important;
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
Specific overrides for glass:
|
|
350
|
-
- No animated shimmer on skeletons — use static `glass-bg`
|
|
351
|
-
- No `glow-pulse` — use static `shadow-glow`
|
|
352
|
-
- No `aurora-shift` — use static gradient
|
|
353
|
-
- No parallax
|
|
354
|
-
- Glass effects (blur, opacity, borders) remain — they are static visual properties, not animations
|
|
355
|
-
- Hover states: instant transitions (no 200ms transitions — snap immediately)
|
|
1
|
+
# Motion — Glassmorphism UI
|
|
2
|
+
|
|
3
|
+
Animation and transition specifications. Glass motion is defined by blur transitions, opacity shifts, and fluid easing — not bounce or spring.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Principles
|
|
8
|
+
|
|
9
|
+
- **Fluid**: movements smooth as a surface of water. Generous ease-out, never bounce, never overshoot.
|
|
10
|
+
- **Layered**: animations respect the depth layers — elements closer to the user animate faster than those further away. Cards animate faster than the background gradient.
|
|
11
|
+
- **Luminous**: opacity and blur transitions are first-class citizens (not just position/scale). The "frosting" of a surface appearing or disappearing is a core motion type.
|
|
12
|
+
- **Effortless**: nothing should look like it is "trying". Natural movements, no dramatic entrances unless the product is explicitly theatrical (media player, landing hero).
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Timing Tokens
|
|
17
|
+
|
|
18
|
+
```css
|
|
19
|
+
--transition-fast: 120ms ease;
|
|
20
|
+
--transition-base: 200ms ease;
|
|
21
|
+
--transition-slow: 350ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
22
|
+
--transition-glass: backdrop-filter 300ms ease,
|
|
23
|
+
background 300ms ease,
|
|
24
|
+
border-color 300ms ease,
|
|
25
|
+
box-shadow 300ms ease;
|
|
26
|
+
--transition-hero: 600ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
`cubic-bezier(0.16, 1, 0.3, 1)` is the smooth deceleration curve — fast start, elegant stop. Use it for entrances and meaningful state changes. Use `ease` for hover/micro-interactions.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Entrance Animations
|
|
34
|
+
|
|
35
|
+
### 1. Glass Fade In
|
|
36
|
+
Card appears as if condensing from air — opacity and blur materialize simultaneously.
|
|
37
|
+
|
|
38
|
+
```css
|
|
39
|
+
@keyframes glass-fade-in {
|
|
40
|
+
from {
|
|
41
|
+
opacity: 0;
|
|
42
|
+
backdrop-filter: blur(0px);
|
|
43
|
+
}
|
|
44
|
+
to {
|
|
45
|
+
opacity: 1;
|
|
46
|
+
backdrop-filter: var(--glass-blur-md);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
.glass-fade-in {
|
|
50
|
+
animation: glass-fade-in 400ms ease-out forwards;
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Use for: initial page load of glass cards, modal appearance.
|
|
55
|
+
|
|
56
|
+
### 2. Float Up
|
|
57
|
+
Card floats up and materializes — the primary entrance for dashboards and stagger lists.
|
|
58
|
+
|
|
59
|
+
```css
|
|
60
|
+
@keyframes float-up {
|
|
61
|
+
from {
|
|
62
|
+
opacity: 0;
|
|
63
|
+
transform: translateY(16px);
|
|
64
|
+
backdrop-filter: blur(0px);
|
|
65
|
+
}
|
|
66
|
+
to {
|
|
67
|
+
opacity: 1;
|
|
68
|
+
transform: translateY(0);
|
|
69
|
+
backdrop-filter: var(--glass-blur-md);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
.float-up {
|
|
73
|
+
animation: float-up 450ms cubic-bezier(0.16, 1, 0.3, 1) forwards;
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Use for: dashboard cards on load, stagger card groups, stat cards appearing.
|
|
78
|
+
|
|
79
|
+
### 3. Scale Materialize
|
|
80
|
+
Element scales up from 95% and solidifies — for modals, dropdowns, and menus.
|
|
81
|
+
|
|
82
|
+
```css
|
|
83
|
+
@keyframes scale-materialize {
|
|
84
|
+
from {
|
|
85
|
+
opacity: 0;
|
|
86
|
+
transform: scale(0.95);
|
|
87
|
+
backdrop-filter: blur(0px);
|
|
88
|
+
}
|
|
89
|
+
to {
|
|
90
|
+
opacity: 1;
|
|
91
|
+
transform: scale(1);
|
|
92
|
+
backdrop-filter: var(--glass-blur-lg);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
.scale-materialize {
|
|
96
|
+
animation: scale-materialize 350ms cubic-bezier(0.16, 1, 0.3, 1) forwards;
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Use for: modal open, dropdown menu, context menu, tooltip appearance.
|
|
101
|
+
|
|
102
|
+
### 4. Glass Slide
|
|
103
|
+
Slides in from a direction and materializes — for drawers, panels, and side sheets.
|
|
104
|
+
|
|
105
|
+
```css
|
|
106
|
+
@keyframes glass-slide-right {
|
|
107
|
+
from {
|
|
108
|
+
opacity: 0;
|
|
109
|
+
transform: translateX(-20px);
|
|
110
|
+
backdrop-filter: blur(0px);
|
|
111
|
+
}
|
|
112
|
+
to {
|
|
113
|
+
opacity: 1;
|
|
114
|
+
transform: translateX(0);
|
|
115
|
+
backdrop-filter: var(--glass-blur-lg);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
@keyframes glass-slide-up {
|
|
119
|
+
from {
|
|
120
|
+
opacity: 0;
|
|
121
|
+
transform: translateY(20px);
|
|
122
|
+
backdrop-filter: blur(0px);
|
|
123
|
+
}
|
|
124
|
+
to {
|
|
125
|
+
opacity: 1;
|
|
126
|
+
transform: translateY(0);
|
|
127
|
+
backdrop-filter: var(--glass-blur-lg);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Use for: sidebar opening (slide-right), bottom sheet (slide-up on mobile), toast notifications (slide-up from bottom-right).
|
|
133
|
+
|
|
134
|
+
### 5. Ambient Field Reveal
|
|
135
|
+
Background ambient gradient washes appear softly for landing pages and auth pages.
|
|
136
|
+
|
|
137
|
+
```css
|
|
138
|
+
@keyframes ambient-field-reveal {
|
|
139
|
+
from {
|
|
140
|
+
opacity: 0;
|
|
141
|
+
transform: scale(0.8);
|
|
142
|
+
}
|
|
143
|
+
to {
|
|
144
|
+
opacity: 0.45;
|
|
145
|
+
transform: scale(1);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
.ambient-field-layer {
|
|
149
|
+
animation: ambient-field-reveal 800ms ease-out forwards;
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Use for: ambient gradient washes on landing pages and auth backgrounds. These should be slow and atmospheric.
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Glass-Specific Animations
|
|
158
|
+
|
|
159
|
+
### 1. Blur Shift (nav on scroll)
|
|
160
|
+
Navigation glass becomes more opaque and blurred as the user scrolls — structural, not decorative.
|
|
161
|
+
|
|
162
|
+
```css
|
|
163
|
+
/* Applied via JS, toggling a class based on scrollY */
|
|
164
|
+
.nav-bar {
|
|
165
|
+
background: var(--glass-bg);
|
|
166
|
+
transition: var(--transition-glass);
|
|
167
|
+
}
|
|
168
|
+
.nav-bar.scrolled {
|
|
169
|
+
background: var(--glass-bg-hover);
|
|
170
|
+
}
|
|
171
|
+
.nav-bar.deep-scrolled {
|
|
172
|
+
background: var(--glass-bg-active);
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Breakpoints: `scrollY > 20` → scrolled, `scrollY > 80` → deep-scrolled.
|
|
177
|
+
|
|
178
|
+
### 2. Opacity Frost (card hover)
|
|
179
|
+
The card's glass becomes more opaque on hover — the primary hover behavior for all glass cards.
|
|
180
|
+
|
|
181
|
+
```css
|
|
182
|
+
.glass-card {
|
|
183
|
+
background: var(--glass-bg);
|
|
184
|
+
box-shadow: var(--shadow-sm), var(--shadow-inner);
|
|
185
|
+
transition: var(--transition-glass);
|
|
186
|
+
}
|
|
187
|
+
.glass-card:hover {
|
|
188
|
+
background: var(--glass-bg-hover);
|
|
189
|
+
box-shadow: var(--shadow-md), var(--shadow-inner);
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Duration: 200ms — fast enough to feel responsive, slow enough to feel smooth.
|
|
194
|
+
|
|
195
|
+
### 3. Glow Pulse (featured/highlighted elements)
|
|
196
|
+
Subtle accent glow pulsing for featured cards, stat heroes, and highlighted elements.
|
|
197
|
+
|
|
198
|
+
```css
|
|
199
|
+
@keyframes glow-pulse {
|
|
200
|
+
0%, 100% { box-shadow: var(--shadow-md), 0 0 20px rgba(124, 58, 237, 0.10); }
|
|
201
|
+
50% { box-shadow: var(--shadow-md), 0 0 40px rgba(124, 58, 237, 0.20); }
|
|
202
|
+
}
|
|
203
|
+
.glass-card--glow {
|
|
204
|
+
animation: glow-pulse 2s ease-in-out infinite;
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Use sparingly — only for the 1 "hero" element per screen. Not for every card.
|
|
209
|
+
|
|
210
|
+
### 4. Shimmer (skeleton loaders)
|
|
211
|
+
Gradient light sweeping across glass surface — the loading state for glass components.
|
|
212
|
+
|
|
213
|
+
```css
|
|
214
|
+
@keyframes shimmer {
|
|
215
|
+
to { transform: translateX(100%); }
|
|
216
|
+
}
|
|
217
|
+
.skeleton {
|
|
218
|
+
position: relative;
|
|
219
|
+
overflow: hidden;
|
|
220
|
+
background: var(--glass-bg);
|
|
221
|
+
}
|
|
222
|
+
.skeleton::after {
|
|
223
|
+
content: '';
|
|
224
|
+
position: absolute;
|
|
225
|
+
inset: 0;
|
|
226
|
+
background: linear-gradient(
|
|
227
|
+
90deg,
|
|
228
|
+
transparent 0%,
|
|
229
|
+
rgba(255, 255, 255, 0.10) 50%,
|
|
230
|
+
transparent 100%
|
|
231
|
+
);
|
|
232
|
+
transform: translateX(-100%);
|
|
233
|
+
animation: shimmer 1.5s infinite;
|
|
234
|
+
}
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### 5. Aurora Shift (animated background — landing only)
|
|
238
|
+
Very slow color hue shift on the aurora gradient background.
|
|
239
|
+
|
|
240
|
+
```css
|
|
241
|
+
@keyframes aurora-shift {
|
|
242
|
+
0% { filter: hue-rotate(0deg); }
|
|
243
|
+
50% { filter: hue-rotate(15deg); }
|
|
244
|
+
100% { filter: hue-rotate(0deg); }
|
|
245
|
+
}
|
|
246
|
+
body[data-aurora] {
|
|
247
|
+
animation: aurora-shift 10s ease-in-out infinite;
|
|
248
|
+
}
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
Constraint: only use on landing pages. Never inside apps or dashboards. Keep cycle slow (8-12s). Intensity very low (max 20deg hue rotation).
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## Stagger
|
|
256
|
+
|
|
257
|
+
When animating multiple cards into view simultaneously:
|
|
258
|
+
|
|
259
|
+
- **Delay per item**: 50ms (between warm-craft at 60ms and clean-saas at 40ms)
|
|
260
|
+
- **Maximum stagger group**: 6 items
|
|
261
|
+
- **Default animation**: `float-up` with staggered delay
|
|
262
|
+
- **Implementation**: CSS custom property or inline `animation-delay`
|
|
263
|
+
|
|
264
|
+
```css
|
|
265
|
+
.stagger-item:nth-child(1) { animation-delay: 0ms; }
|
|
266
|
+
.stagger-item:nth-child(2) { animation-delay: 50ms; }
|
|
267
|
+
.stagger-item:nth-child(3) { animation-delay: 100ms; }
|
|
268
|
+
.stagger-item:nth-child(4) { animation-delay: 150ms; }
|
|
269
|
+
.stagger-item:nth-child(5) { animation-delay: 200ms; }
|
|
270
|
+
.stagger-item:nth-child(6) { animation-delay: 250ms; }
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## Hover States (summary)
|
|
276
|
+
|
|
277
|
+
| Element | Hover behavior | Duration |
|
|
278
|
+
|---------|---------------|----------|
|
|
279
|
+
| Glass Card | `glass-bg` → `glass-bg-hover` + `shadow-sm` → `shadow-md` | 200ms |
|
|
280
|
+
| Primary Button | `brightness(1.05)` + `shadow-sm` → `shadow-md` | 120ms |
|
|
281
|
+
| Glass Button | `glass-bg` → `glass-bg-hover` | 120ms |
|
|
282
|
+
| Nav items (sidebar) | `transparent` → `glass-bg-hover` | 150ms |
|
|
283
|
+
| Nav links (website) | `text-secondary` → `text-heading` | 150ms |
|
|
284
|
+
| Logo cloud | `grayscale opacity-50` → `color opacity-100` | 200ms |
|
|
285
|
+
| Links | underline opacity `0` → `1` | 150ms |
|
|
286
|
+
| Images in glass frame | `scale(1)` → `scale(1.02)` inside `overflow: hidden` | 300ms |
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## Scroll Animations (websites only)
|
|
291
|
+
|
|
292
|
+
### Ambient Field Drift
|
|
293
|
+
Ambient gradient field layers move at a slower rate than the scroll:
|
|
294
|
+
```css
|
|
295
|
+
/* Applied via JS with requestAnimationFrame */
|
|
296
|
+
.ambient-field-layer {
|
|
297
|
+
transform: translateY(calc(var(--scroll-y) * 0.3px));
|
|
298
|
+
}
|
|
299
|
+
```
|
|
300
|
+
Multiplier: 0.3-0.5 for subtle field drift.
|
|
301
|
+
|
|
302
|
+
### Section Reveal
|
|
303
|
+
Glass cards and sections fade up as they enter the viewport:
|
|
304
|
+
```javascript
|
|
305
|
+
const observer = new IntersectionObserver(
|
|
306
|
+
(entries) => entries.forEach(e => {
|
|
307
|
+
if (e.isIntersecting) e.target.classList.add('float-up');
|
|
308
|
+
}),
|
|
309
|
+
{ threshold: 0.1 }
|
|
310
|
+
);
|
|
311
|
+
document.querySelectorAll('.reveal').forEach(el => observer.observe(el));
|
|
312
|
+
```
|
|
313
|
+
Threshold: 0.1 — triggers when 10% of element is visible.
|
|
314
|
+
|
|
315
|
+
### Nav Frost (scroll-triggered)
|
|
316
|
+
Navigation glass increases opacity as scroll position increases — see Blur Shift above.
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
## Page Transitions
|
|
321
|
+
|
|
322
|
+
| Transition | In | Out |
|
|
323
|
+
|-----------|-----|-----|
|
|
324
|
+
| Route change (SPA) | `glass-fade-in` 350ms + `float-up` 350ms | `opacity` 0, 200ms |
|
|
325
|
+
| Modal open | `scale-materialize` 300ms | `opacity + scale(0.97)` 150ms |
|
|
326
|
+
| Bottom sheet open | `glass-slide-up` 350ms | `glass-slide-up` reversed 250ms |
|
|
327
|
+
| Tab content | `opacity 0→1` 200ms | `opacity 1→0` 150ms |
|
|
328
|
+
| Toast in | `glass-slide-up` 350ms | `opacity 1→0 + translateY(8px)` 200ms |
|
|
329
|
+
| Dropdown open | `scale-materialize` 200ms | `opacity 1→0 + scale(0.97)` 150ms |
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## Reduced Motion
|
|
334
|
+
|
|
335
|
+
**Mandatory**: always respect `prefers-reduced-motion: reduce`.
|
|
336
|
+
|
|
337
|
+
```css
|
|
338
|
+
@media (prefers-reduced-motion: reduce) {
|
|
339
|
+
*,
|
|
340
|
+
*::before,
|
|
341
|
+
*::after {
|
|
342
|
+
animation-duration: 0.01ms !important;
|
|
343
|
+
animation-iteration-count: 1 !important;
|
|
344
|
+
transition-duration: 0.01ms !important;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
Specific overrides for glass:
|
|
350
|
+
- No animated shimmer on skeletons — use static `glass-bg`
|
|
351
|
+
- No `glow-pulse` — use static `shadow-glow`
|
|
352
|
+
- No `aurora-shift` — use static gradient
|
|
353
|
+
- No ambient-field parallax — background layers stay fixed
|
|
354
|
+
- Glass effects (blur, opacity, borders) remain — they are static visual properties, not animations
|
|
355
|
+
- Hover states: instant transitions (no 200ms transitions — snap immediately)
|