@vanduo-oss/framework 1.3.4 → 1.3.5

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/LICENSE CHANGED
@@ -19,17 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  SOFTWARE.
22
-
23
- ---
24
-
25
- Third-Party Licenses:
26
-
27
- Open Color
28
- Copyright (c) 2016 Heeyeun Jeong
29
- MIT License
30
- https://yeun.github.io/open-color/
31
-
32
- Phosphor Icons
33
- Copyright (c) 2020 Phosphor Icons
34
- MIT License
35
- https://phosphoricons.com/
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Vanduo Framework v1.3.4
1
+ # Vanduo Framework v1.3.5
2
2
 
3
3
  <p align="center">
4
4
  <img src="vanduo-banner.svg" alt="Vanduo Framework Banner" width="100%">
@@ -7,115 +7,34 @@
7
7
  <p align="center">
8
8
  <a href="https://www.npmjs.com/package/@vanduo-oss/framework"><img src="https://img.shields.io/npm/v/@vanduo-oss/framework?style=flat-square&color=3b82f6" alt="NPM Version"></a>
9
9
  <a href="https://github.com/vanduo-oss/framework/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/vanduo-oss/framework/ci.yml?branch=main&style=flat-square&color=10b981" alt="Build Status"></a>
10
- <a href="https://github.com/vanduo-oss/framework/blob/main/dist/vanduo.min.css"><img src="https://img.shields.io/badge/minified_size-~110kb-8b5cf6?style=flat-square" alt="Minified Size"></a>
11
10
  <a href="https://github.com/vanduo-oss/framework/blob/main/LICENSE"><img src="https://img.shields.io/github/license/vanduo-oss/framework?style=flat-square&color=64748b" alt="License"></a>
12
11
  </p>
13
12
 
14
- **Essential just like water is.**
13
+ **Essential just like water is.**
15
14
 
16
- - **Pure HTML, CSS, JS**
17
- - **No third party dependencies**
18
- - **Free and open source.**
15
+ Vanduo is a lightweight, zero-dependency UI framework built with pure HTML, CSS, and JavaScript. It ships 46+ components, responsive utilities, dark mode support, and a flexible theming system.
19
16
 
20
- ## Overview
17
+ [Browse Docs](https://vanduo.dev/#docs)
21
18
 
22
- A lightweight, pure HTML/CSS/JS framework with **46+ components** for designing beautiful interfaces. Zero runtime dependencies, no mandatory build tools, just clean and simple code.
19
+ ## Highlights
23
20
 
24
- [**Browse Full Documentation →**](https://vanduo.dev/#docs)
25
-
26
- ## Features
27
-
28
- - 🎨 **Pure CSS/JS** - No libraries, no dependencies
29
- - 🚀 **Lightweight** - Minimal file size, maximum performance
30
- - 📱 **Responsive** - Mobile-first design approach
31
- - 🎯 **Utility-First** - Flexible utility classes for rapid development
32
- - 🧩 **Modular** - Import only what you need
33
- - ♿ **Accessible** - Built with accessibility in mind (WCAG 2.1 AA)
34
- - 🌙 **Dark Mode** - Automatic OS preference detection + manual toggle
35
- - 🌗 **Theme Switcher** - Lightweight light/dark/system toggle with shared preference storage
36
- - 🎛️ **Theme Customizer** - Real-time color, radius, font, and mode customization
37
- - 🔍 **SEO-Ready** - Comprehensive meta tags, structured data, and sitemap
38
-
39
- ---
40
-
41
- ## What's New in v1.3.4
42
-
43
- v1.3.4 introduces the Glass Effects system — no breaking changes:
44
-
45
- - **New `effects/glass.css` module.** Core `.vd-glass` class with `backdrop-filter` blur, translucent background, specular highlight, and noise texture. Size variants (`vd-glass-sm / md / lg / xl`), modifiers (`vd-glass-tinted`, `vd-glass-floating`, `vd-glass-contrast`), and full `prefers-reduced-transparency` / `@supports not (backdrop-filter)` fallbacks.
46
- - **Glass design tokens.** `--vd-glass-blur`, `--vd-glass-saturate`, `--vd-glass-bg-opacity`, `--vd-glass-bg-light/dark`, `--vd-glass-border-light/dark`, `--vd-glass-shadow`, `--vd-glass-highlight-alpha`, `--vd-glass-noise-opacity` — all with automatic dark-mode overrides and `--vd-glass-*` aliases.
47
- - **Component glass variants.** Opt-in `.vd-*-glass` modifier added to Navbar, Modal, Dropdown, Tooltip, Toast, Card, and FAB.
48
- - **Scroll-activated glass.** `initScrollWatcher()` in `navbar.js` activates `.vd-navbar-glass` transparently at rest and frosted on scroll (configurable via `data-scroll-threshold`). Generic `data-glass-scroll` + `data-glass-sentinel` attribute API (new `glass.js`, `IntersectionObserver`) brings the same pattern to any element via `.is-glass-active`.
49
- - **vd-hex selection fix.** `VdHexGrid` re-syncs `selectedHex` references after grid regeneration, preventing stale coordinates during rotation.
50
-
51
- ## What's New in v1.3.3
52
-
53
- v1.3.3 is a maintenance release with no breaking changes:
54
-
55
- - **Theme default primary alignment.** `ThemeCustomizer` and `ThemeSwitcher` normalize stale `black`/`amber` primary pairs against `localStorage` and `prefers-color-scheme`, so light, dark, and system modes stay consistent with `data-primary` after reloads and OS theme changes.
56
- - **Documentation site.** Theme customizer demo storage keys align with framework (`vanduo-radius`, `vanduo-font-preference`); changelog and CDN pins updated to v1.3.3.
57
-
58
- ---
59
-
60
- ## What's New in v1.3.2
61
-
62
- v1.3.2 is a component release centered on audio playback, with no breaking changes:
63
-
64
- - **New Music Player component.** Ships a zero-dependency HTML5 audio player with play/pause, previous/next, volume, track title, and optional progress, shuffle, and playlist controls.
65
- - **Framework-friendly API.** Accepts a plain JavaScript tracks array (`[{ name, url }]`), exposes custom events, and supports programmatic control through `window.VanduoMusicPlayer`.
66
- - **Responsive player layout.** Control wrapping and volume sizing were tuned so the component stays usable across compact, inline, and mobile layouts.
67
- - **Release coverage and artifacts updated.** Package metadata, generated bundles, `llms.txt`, and release-facing README examples now point at v1.3.2.
68
-
69
- The framework now ships **46+ components**, including the new Music Player and the additions below.
70
-
71
- | Component | Vanduo Name | Type |
72
- |---|---|---|
73
- | Carousel | Flow | CSS + JS |
74
- | Music Player | Music Player | CSS + JS |
75
- | Popover | Bubble | CSS + JS |
76
- | Scrollspy | Waypoint | CSS + JS |
77
- | Offcanvas | — (enhanced Sidenav) | CSS + JS |
78
- | Ripple / Waves | Ripple | CSS + JS |
79
- | Floating Action Button | FAB | CSS-only |
80
- | Sticky | Affix | CSS + JS |
81
- | Autocomplete | Suggest | CSS + JS |
82
- | Form Validation | Validate | JS |
83
- | Date Picker | Datepicker | CSS + JS |
84
- | Time Picker | Timepicker | CSS + JS |
85
- | Stepper | Stepper | CSS + JS |
86
- | Timeline | Timeline | CSS-only |
87
- | Rating | Rating | CSS + JS |
88
- | Transfer / Multi-select | Transfer | CSS + JS |
89
- | Tree View | Tree | CSS + JS |
90
- | Spotlight / Feature Discovery | Spotlight | CSS + JS |
91
-
92
- ---
21
+ - Pure CSS/JS with no runtime dependencies
22
+ - Modular architecture with optional per-component imports
23
+ - Built-in dark/light/system theme switching
24
+ - Runtime Theme Customizer for color, font, and radius tokens
25
+ - Accessibility-focused components and utilities
93
26
 
94
27
  ## Quick Start
95
28
 
96
- ### Option 1: CDN (Recommended)
97
-
98
- The quickest way to get started — no install, no build step. Add two lines to any HTML file:
29
+ ### CDN (recommended)
99
30
 
100
31
  ```html
101
- <!-- Vanduo CSS -->
102
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@main/dist/vanduo.min.css">
103
-
104
- <!-- Vanduo JS -->
105
- <script src="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@main/dist/vanduo.min.js"></script>
32
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@v1.3.5/dist/vanduo.min.css">
33
+ <script src="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@v1.3.5/dist/vanduo.min.js"></script>
106
34
  <script>Vanduo.init();</script>
107
35
  ```
108
36
 
109
- **Pin to a specific version** for production:
110
- ```html
111
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@v1.3.4/dist/vanduo.min.css">
112
- <script src="https://cdn.jsdelivr.net/gh/vanduo-oss/framework@v1.3.4/dist/vanduo.min.js"></script>
113
- <script>Vanduo.init();</script>
114
- ```
115
-
116
- ### Option 2: Download
117
-
118
- [**Download the dist/ folder**](https://github.com/vanduo-oss/framework/tree/main/dist) and include locally — no internet connection required at runtime:
37
+ ### Local dist files
119
38
 
120
39
  ```html
121
40
  <link rel="stylesheet" href="dist/vanduo.min.css">
@@ -123,97 +42,37 @@ The quickest way to get started — no install, no build step. Add two lines to
123
42
  <script>Vanduo.init();</script>
124
43
  ```
125
44
 
126
- The `dist/` folder is **self-contained** (CSS, JS, Fonts, Icons).
127
-
128
- ### Option 3: Source Files
129
-
130
- For development or when you need more control, use the unminified source:
131
-
132
- ```html
133
- <link rel="stylesheet" href="css/vanduo.css">
134
- <script src="js/vanduo.js"></script>
135
- <script>Vanduo.init();</script>
136
- ```
137
-
138
- ### Option 4: With a Bundler (Vite)
139
-
140
- > **Requires a build tool.** The imports below use bare module specifiers (`@vanduo-oss/framework`) which browsers cannot resolve on their own. For static HTML files, use the CDN or Download options above.
141
-
142
- Scaffold a Vite project and install Vanduo:
45
+ ### Package install (bundlers)
143
46
 
144
47
  ```bash
145
- pnpm create vite my-app --template vanilla
146
- cd my-app
147
48
  pnpm add @vanduo-oss/framework
148
49
  ```
149
50
 
150
- Import in your entry file (e.g. `main.js`):
151
-
152
51
  ```js
153
52
  import '@vanduo-oss/framework/css';
154
53
  import { Vanduo } from '@vanduo-oss/framework';
155
- Vanduo.init();
156
- ```
157
-
158
- **Why pnpm?** pnpm enforces a strict lockfile and creates an isolated `node_modules` structure. Vanduo's `.npmrc` security policies work best with pnpm out of the box.
159
-
160
- *(Note: `npm install @vanduo-oss/framework` and `yarn add @vanduo-oss/framework` will also work, but they do not enforce the same strict lockfile and isolated `node_modules` security guarantees.)*
161
-
162
- ---
163
-
164
- ## LLM Access
165
-
166
- This project includes an [`llms.txt`](llms.txt) file — a structured markdown summary designed for AI assistants and LLM-powered code editors. It provides quick access to framework documentation, component references, and usage patterns.
167
54
 
168
- ---
169
-
170
- ## Release Assets (Maintainers)
171
-
172
- Use the hardened upload script to attach only approved bundle artifacts from `dist/`:
173
-
174
- ```bash
175
- pnpm run release:assets -- v1.3.4
55
+ Vanduo.init();
176
56
  ```
177
57
 
178
- Notes:
179
- - If tag is omitted, it defaults to `v` + version from `package.json`.
180
- - Use `--dry-run` to preview files without uploading.
181
-
182
- ---
183
-
184
- ## Documentation
58
+ ## Docs and Resources
185
59
 
186
- Comprehensive documentation for all components, utilities, and customization options is available at vanduo.dev.
187
-
188
- [**View Documentation**](https://vanduo.dev/#docs)
189
-
190
- ### Key Capabilities
191
-
192
- * **Dark Mode**: Works automatically with system preferences. Can be forced via `data-theme="dark"` on `<html>`.
193
- * **Theme Switcher**: Lightweight light/dark/system toggle that can coexist with Theme Customizer.
194
- * **Theme Customizer**: Built-in runtime tool to change colors, fonts, and radius.
195
- * **Modular Imports**: Import only specific components (e.g., `css/components/buttons.css`) to keep your site lean.
196
- * **Icons**: Includes [Phosphor Icons](https://phosphoricons.com) (Regular + Fill weights bundled).
197
-
198
- ---
60
+ - Website: [vanduo.dev](https://vanduo.dev)
61
+ - Docs: [vanduo.dev/#docs](https://vanduo.dev/#docs)
62
+ - npm: [@vanduo-oss/framework](https://www.npmjs.com/package/@vanduo-oss/framework)
63
+ - Releases: [GitHub Releases](https://github.com/vanduo-oss/framework/releases)
64
+ - LLM reference: [`llms.txt`](llms.txt)
199
65
 
200
66
  ## Project Structure
201
67
 
202
- ```
68
+ ```text
203
69
  vanduo-framework/
204
- ├── dist/ # Production ready files (minified)
205
- ├── css/
206
- ├── vanduo.css # Main framework file (imports all)
207
- ├── core/ # Foundation (colors, typography, grid)
208
- ├── components/ # UI components (buttons, cards, etc)
209
- │ ├── utilities/ # Utility classes
210
- │ └── effects/ # Visual effects
211
- ├── js/
212
- │ ├── vanduo.js # Main entry point
213
- │ └── components/ # Component logic
214
- ├── icons/ # Phosphor Icons
215
- ├── fonts/ # Web fonts
216
- └── tests/ # Framework test suite
70
+ ├── dist/ # Production bundles
71
+ ├── css/ # Core, components, utilities, effects
72
+ ├── js/ # Framework runtime and components
73
+ ├── fonts/ # Bundled web fonts
74
+ ├── icons/ # Phosphor icons bundle
75
+ └── tests/ # Playwright + linting
217
76
  ```
218
77
 
219
78
  ## Browser Support
@@ -225,12 +84,10 @@ vanduo-framework/
225
84
 
226
85
  ## License
227
86
 
228
- MIT License - see [LICENSE](LICENSE) file for details.
87
+ MIT - see [LICENSE](LICENSE).
88
+ Third-party notices are listed in [THIRD-PARTY-LICENSES](THIRD-PARTY-LICENSES).
229
89
 
230
90
  ## Credits
231
91
 
232
- - **Color System**: [Open Color](https://yeun.github.io/open-color/) by Heeyeun Jeong (MIT License)
233
- - **Icons**: [Phosphor Icons](https://phosphoricons.com) (MIT License)
234
-
235
- ---
236
- Vanduo Framework - Built with ❤️ for the web.
92
+ - [Open Color](https://yeun.github.io/open-color/) (MIT)
93
+ - [Phosphor Icons](https://phosphoricons.com/) (MIT)
@@ -5,11 +5,11 @@
5
5
 
6
6
  :root {
7
7
  /* Tooltip Colors */
8
- --tooltip-bg: var(--color-gray-900);
9
- --tooltip-bg-light: var(--color-white);
8
+ --tooltip-bg: var(--color-white);
9
+ --tooltip-bg-light: var(--color-gray-100);
10
10
  --tooltip-bg-dark: var(--color-gray-900);
11
- --tooltip-text-color: var(--color-white);
12
- --tooltip-text-color-light: var(--color-gray-900);
11
+ --tooltip-text-color: var(--color-gray-900);
12
+ --tooltip-text-color-light: var(--color-gray-800);
13
13
  --tooltip-text-color-dark: var(--color-white);
14
14
 
15
15
  /* Tooltip Spacing (Fibonacci pairs: x/y ratio ~ phi) */
@@ -39,16 +39,16 @@
39
39
 
40
40
  /* Dark Theme Overrides */
41
41
  [data-theme="dark"] {
42
- --tooltip-bg: var(--color-gray-100);
43
- --tooltip-text-color: var(--color-gray-900);
42
+ --tooltip-bg: var(--color-gray-900);
43
+ --tooltip-text-color: var(--color-white);
44
44
  --tooltip-bg-light: var(--color-gray-800);
45
45
  --tooltip-text-color-light: var(--color-gray-100);
46
46
  }
47
47
 
48
48
  @media (prefers-color-scheme: dark) {
49
49
  :root:not([data-theme]) {
50
- --tooltip-bg: var(--color-gray-100);
51
- --tooltip-text-color: var(--color-gray-900);
50
+ --tooltip-bg: var(--color-gray-900);
51
+ --tooltip-text-color: var(--color-white);
52
52
  --tooltip-bg-light: var(--color-gray-800);
53
53
  --tooltip-text-color-light: var(--color-gray-100);
54
54
  }
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Vanduo Framework - Water Morph Effect
3
+ * Liquid wave content-swap animation on click
4
+ *
5
+ * Usage:
6
+ * Add `.vd-morph` (or `data-vd-morph`) to any element.
7
+ * Inside it, place:
8
+ * .vd-morph-wave — radial wave layer (auto-created by JS if missing)
9
+ * .vd-morph-shine — light-sweep layer (auto-created by JS if missing)
10
+ * .vd-morph-content.vd-morph-current — visible state
11
+ * .vd-morph-content.vd-morph-next — hidden next state
12
+ */
13
+
14
+ :root {
15
+ --morph-duration: 0.75s;
16
+ --morph-easing: cubic-bezier(0.2, 0.8, 0.35, 1);
17
+ --morph-blur-peak: 11px;
18
+ --morph-wave-color: var(--color-primary, #3b82f6);
19
+ }
20
+
21
+ /* ========== Base ========== */
22
+
23
+ .vd-morph,
24
+ [data-vd-morph] {
25
+ position: relative;
26
+ overflow: hidden;
27
+ cursor: pointer;
28
+ -webkit-tap-highlight-color: transparent;
29
+ }
30
+
31
+ /* ========== Wave Layer ========== */
32
+
33
+ .vd-morph-wave {
34
+ position: absolute;
35
+ border-radius: 50%;
36
+ background:
37
+ radial-gradient(circle at 32% 28%,
38
+ color-mix(in srgb, #fff 55%, transparent) 0%,
39
+ color-mix(in srgb, #fff 18%, transparent) 18%,
40
+ transparent 38%),
41
+ radial-gradient(circle at 68% 70%,
42
+ color-mix(in srgb, #fff 30%, transparent) 0%,
43
+ transparent 30%),
44
+ radial-gradient(circle at 50% 50%,
45
+ color-mix(in srgb, var(--morph-wave-color) 96%, #a8d8ff) 0%,
46
+ color-mix(in srgb, var(--morph-wave-color) 82%, #7ec8ff) 35%,
47
+ color-mix(in srgb, var(--morph-wave-color) 70%, #5ba4f5) 65%,
48
+ color-mix(in srgb, var(--morph-wave-color) 90%, #4478f0) 100%);
49
+ pointer-events: none;
50
+ opacity: 0;
51
+ transform: translate(-50%, -50%);
52
+ will-change: width, height, opacity, filter;
53
+ }
54
+
55
+ .vd-morph.is-morphing .vd-morph-wave {
56
+ animation: vd-morph-expand var(--morph-duration) var(--morph-easing) forwards;
57
+ }
58
+
59
+ .vd-morph.is-morphing .vd-morph-wave::after {
60
+ content: '';
61
+ position: absolute;
62
+ top: 50%;
63
+ left: 50%;
64
+ width: 0;
65
+ height: 0;
66
+ border-radius: 50%;
67
+ background:
68
+ radial-gradient(circle at 50% 50%,
69
+ color-mix(in srgb, var(--morph-wave-color) 70%, #b0e0ff) 0%,
70
+ color-mix(in srgb, var(--morph-wave-color) 50%, #88c0ff) 45%,
71
+ transparent 80%);
72
+ transform: translate(-50%, -50%);
73
+ opacity: 0;
74
+ animation: vd-morph-expand2 var(--morph-duration) var(--morph-easing) 0.08s forwards;
75
+ }
76
+
77
+ @keyframes vd-morph-expand {
78
+ 0% {
79
+ width: 0;
80
+ height: 0;
81
+ opacity: 0;
82
+ filter: blur(0px) saturate(2);
83
+ }
84
+ 6% {
85
+ opacity: 1;
86
+ filter: blur(1px) saturate(2.2);
87
+ }
88
+ 35% {
89
+ opacity: 0.92;
90
+ filter: blur(6px) saturate(1.7);
91
+ }
92
+ 68% {
93
+ width: 360%;
94
+ height: 360%;
95
+ opacity: 0.6;
96
+ filter: blur(var(--morph-blur-peak)) saturate(1.3);
97
+ }
98
+ 100% {
99
+ width: 360%;
100
+ height: 360%;
101
+ opacity: 0;
102
+ filter: blur(7px) saturate(1);
103
+ }
104
+ }
105
+
106
+ @keyframes vd-morph-expand2 {
107
+ 0% {
108
+ width: 0;
109
+ height: 0;
110
+ opacity: 0;
111
+ filter: blur(0px);
112
+ }
113
+ 10% {
114
+ opacity: 0.7;
115
+ filter: blur(3px);
116
+ }
117
+ 60% {
118
+ width: 280%;
119
+ height: 280%;
120
+ opacity: 0.38;
121
+ filter: blur(14px);
122
+ }
123
+ 100% {
124
+ width: 280%;
125
+ height: 280%;
126
+ opacity: 0;
127
+ filter: blur(10px);
128
+ }
129
+ }
130
+
131
+ /* ========== Shine Sweep ========== */
132
+
133
+ .vd-morph-shine {
134
+ position: absolute;
135
+ top: 0;
136
+ left: -110%;
137
+ width: 80%;
138
+ height: 100%;
139
+ background: linear-gradient(
140
+ 105deg,
141
+ transparent 0%,
142
+ color-mix(in srgb, #fff 10%, transparent) 35%,
143
+ color-mix(in srgb, #fff 52%, transparent) 50%,
144
+ color-mix(in srgb, #fff 10%, transparent) 65%,
145
+ transparent 100%
146
+ );
147
+ pointer-events: none;
148
+ opacity: 0;
149
+ transform: skewX(-12deg);
150
+ will-change: left, opacity;
151
+ }
152
+
153
+ .vd-morph.is-morphing .vd-morph-shine {
154
+ animation: vd-morph-shine 0.72s cubic-bezier(0.3, 0.65, 0.5, 1) 0.04s forwards;
155
+ }
156
+
157
+ @keyframes vd-morph-shine {
158
+ 0% {
159
+ left: -110%;
160
+ opacity: 0;
161
+ }
162
+ 15% {
163
+ opacity: 0.9;
164
+ }
165
+ 72% {
166
+ opacity: 0.4;
167
+ }
168
+ 100% {
169
+ left: 130%;
170
+ opacity: 0;
171
+ }
172
+ }
173
+
174
+ /* ========== Completion Bounce ========== */
175
+
176
+ .vd-morph.morph-done {
177
+ animation: vd-morph-bounce 0.32s cubic-bezier(0.34, 1.56, 0.64, 1);
178
+ }
179
+
180
+ @keyframes vd-morph-bounce {
181
+ 0% { transform: scale(0.97); }
182
+ 60% { transform: scale(1.025); }
183
+ 100% { transform: scale(1); }
184
+ }
185
+
186
+ /* ========== Content Layers ========== */
187
+
188
+ .vd-morph-content {
189
+ position: absolute;
190
+ inset: 0;
191
+ display: flex;
192
+ align-items: center;
193
+ justify-content: center;
194
+ gap: 0.45rem;
195
+ pointer-events: none;
196
+ will-change: opacity, transform, filter;
197
+ }
198
+
199
+ .vd-morph-current {
200
+ opacity: 1;
201
+ transform: scale(1) translateY(0);
202
+ filter: blur(0px);
203
+ z-index: 2;
204
+ transition:
205
+ opacity 0.28s cubic-bezier(0.4, 0, 0.6, 1),
206
+ transform 0.28s cubic-bezier(0.4, 0, 0.6, 1),
207
+ filter 0.28s ease;
208
+ }
209
+
210
+ .vd-morph-next {
211
+ opacity: 0;
212
+ transform: scale(0.86) translateY(4px);
213
+ filter: blur(3px);
214
+ z-index: 1;
215
+ transition:
216
+ opacity 0.3s cubic-bezier(0, 0, 0.2, 1),
217
+ transform 0.3s cubic-bezier(0, 0, 0.2, 1),
218
+ filter 0.3s ease;
219
+ }
220
+
221
+ .vd-morph.is-morphing .vd-morph-current {
222
+ opacity: 0;
223
+ transform: scale(0.82) translateY(-4px);
224
+ filter: blur(4px);
225
+ transition-duration: 0.2s;
226
+ transition-delay: 0s;
227
+ }
228
+
229
+ .vd-morph.is-morphing .vd-morph-next {
230
+ opacity: 1;
231
+ transform: scale(1) translateY(0);
232
+ filter: blur(0px);
233
+ transition-duration: 0.3s;
234
+ transition-delay: 0.25s;
235
+ }
236
+
237
+ /* ========== Size Variants ========== */
238
+
239
+ .vd-morph-sm {
240
+ --morph-duration: 0.5s;
241
+ --morph-blur-peak: 7px;
242
+ }
243
+
244
+ .vd-morph-lg {
245
+ --morph-duration: 1s;
246
+ --morph-blur-peak: 16px;
247
+ }
248
+
249
+ /* ========== Accessibility ========== */
250
+
251
+ @media (prefers-reduced-motion: reduce) {
252
+ .vd-morph,
253
+ .vd-morph-content,
254
+ .vd-morph-wave,
255
+ .vd-morph-shine {
256
+ transition: none !important;
257
+ animation: none !important;
258
+ }
259
+ }
package/css/vanduo.css CHANGED
@@ -76,6 +76,7 @@
76
76
  /* Effects - Phase 7 */
77
77
  @import url('effects/parallax.css');
78
78
  @import url('effects/glass.css');
79
+ @import url('effects/morph.css');
79
80
 
80
81
  /* Components - Phase 9 (New) */
81
82
  @import url('components/draggable.css');
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "1.3.4",
3
- "builtAt": "2026-04-14T21:21:55.517Z",
4
- "commit": "73e3db5",
2
+ "version": "1.3.5",
3
+ "builtAt": "2026-04-15T18:39:53.955Z",
4
+ "commit": "3ca4f62",
5
5
  "mode": "development+production"
6
6
  }