@creativoma/liquid-glass 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,53 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [Unreleased]
9
+
10
+ ## [1.1.0] - 2026-02-14
11
+
12
+ ### Added
13
+
14
+ - Exported `useBrowserDetection` hook for public use, allowing consumers to detect Safari/iOS browsers
15
+ - Performance optimizations: RegExp patterns hoisted to module level in browser detection
16
+ - Claude Code development files to `.gitignore` (`.claude/`, `.agents/`)
17
+
18
+ ### Changed
19
+
20
+ - Updated package.json exports field: moved `types` condition first for better TypeScript compatibility
21
+ - Updated package.json paths to use relative `./` prefix for improved module resolution
22
+ - Updated major dependencies:
23
+ - `eslint-plugin-react-hooks` `^5.2.0` → `^7.0.1`
24
+ - `@vitejs/plugin-react` `^4.7.0` → `^5.1.4`
25
+ - Updated minor dependencies:
26
+ - `@types/node` `^20.19.25` → `^25.2.3`
27
+ - `@types/react` `^19.2.7` → `^19.2.14`
28
+ - `typescript-eslint` `^8.48.1` → `^8.55.0`
29
+ - React `^19.2.1` → `^19.2.4`
30
+ - Vite `^7.2.6` → `^7.3.1`
31
+ - And other dev dependencies to latest versions
32
+
33
+ ### Documentation
34
+
35
+ - Improved README.md with professional formatting
36
+ - Removed emoji decorators from section headers
37
+ - Added comprehensive feature list and additional badges
38
+ - Enhanced API reference structure
39
+
40
+ ## [1.0.3] - 2025-12-06
41
+
42
+ ### Fixed
43
+
44
+ - Fixed liquid glass effect not working on iOS Safari and Safari browsers
45
+ - Implemented browser detection to identify Safari/iOS devices
46
+ - Added simplified SVG filter fallback for Safari/iOS that uses only well-supported primitives (`feTurbulence`, `feGaussianBlur`, `feColorMatrix`, `feBlend`)
47
+ - Maintained full-featured filter with `feDisplacementMap` for non-Safari browsers
48
+
49
+ ### Added
50
+
51
+ - Browser detection function with SSR support using `useEffect`
52
+ - Hardware acceleration hints for Safari/iOS (`transform: translateZ(0)`, `willChange: transform`)
53
+ - Dual filter system that automatically selects appropriate filter based on browser capabilities
54
+
8
55
  ## [1.0.2] - 2025-12-06
9
56
 
10
57
  ### Changed
package/README.md CHANGED
@@ -1,12 +1,24 @@
1
1
  # @creativoma/liquid-glass
2
2
 
3
- ![Screenshot](public/screenshot.jpeg)
3
+ [![npm version](https://img.shields.io/npm/v/@creativoma/liquid-glass.svg)](https://www.npmjs.com/package/@creativoma/liquid-glass)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.0-blue.svg)](https://www.typescriptlang.org/)
6
+ [![React](https://img.shields.io/badge/React-18+-61DAFB.svg)](https://reactjs.org/)
4
7
 
5
- A modern React component with liquid frosted glass effect using TailwindCSS. Perfect for creating elegant interfaces with glassmorphism effect.
8
+ A modern React component library featuring liquid frosted glass effect using TailwindCSS and SVG filters. Create elegant glassmorphism interfaces with advanced visual effects.
6
9
 
7
- [![npm version](https://img.shields.io/npm/v/@creativoma/liquid-glass.svg)](https://www.npmjs.com/package/@creativoma/liquid-glass)
10
+ ## Features
8
11
 
9
- ## 🚀 Installation
12
+ - Liquid frosted glass effect with customizable displacement mapping
13
+ - Full TypeScript support with comprehensive type definitions
14
+ - TailwindCSS integration for seamless styling
15
+ - Polymorphic component API (render as any HTML element)
16
+ - Cross-browser compatible with Safari/iOS fallback support
17
+ - Customizable blur, tint, and turbulence parameters
18
+ - Zero dependencies (peer dependencies only)
19
+ - ESM and UMD formats for maximum compatibility
20
+
21
+ ## Installation
10
22
 
11
23
  ```bash
12
24
  npm install @creativoma/liquid-glass
@@ -20,7 +32,7 @@ yarn add @creativoma/liquid-glass
20
32
  pnpm add @creativoma/liquid-glass
21
33
  ```
22
34
 
23
- ## 📖 Basic Usage
35
+ ## Quick Start
24
36
 
25
37
  ```jsx
26
38
  import { LiquidGlass } from '@creativoma/liquid-glass'
@@ -37,7 +49,9 @@ function App() {
37
49
  }
38
50
  ```
39
51
 
40
- ## ⚙️ Props
52
+ ## API Reference
53
+
54
+ ### Props
41
55
 
42
56
  | Prop | Type | Default | Description |
43
57
  | ------------------------- | ----------------- | --------------------------- | ----------------------------------------------------- |
@@ -51,7 +65,7 @@ function App() {
51
65
  | `as` | `ElementType` | `'div'` | HTML component to render (div, button, section, etc.) |
52
66
  | `style` | `CSSProperties` | - | Additional inline styles |
53
67
 
54
- ## 💡 Advanced Examples
68
+ ## Usage Examples
55
69
 
56
70
  ### Card with glass effect
57
71
 
@@ -137,7 +151,7 @@ function App() {
137
151
  </LiquidGlass>
138
152
  ```
139
153
 
140
- ## 🛠️ Development
154
+ ## Development
141
155
 
142
156
  ```bash
143
157
  # Clone the repository
@@ -167,7 +181,7 @@ pnpm run preview
167
181
  npm publish
168
182
  ```
169
183
 
170
- ## 🧪 Project Structure
184
+ ## Project Structure
171
185
 
172
186
  ```
173
187
  liquid-glass/
@@ -189,13 +203,13 @@ liquid-glass/
189
203
  └── tailwind.config.js
190
204
  ```
191
205
 
192
- ## 📋 Requirements
206
+ ## Requirements
193
207
 
194
208
  - React >= 18.0.0
195
209
  - React DOM >= 18.0.0
196
210
  - TailwindCSS (component uses Tailwind classes)
197
211
 
198
- ## 🏗️ Technologies
212
+ ## Technologies
199
213
 
200
214
  - **React** - Component library
201
215
  - **TypeScript** - Static typing
@@ -203,7 +217,7 @@ liquid-glass/
203
217
  - **Tailwind CSS** - CSS framework for glassmorphism effect
204
218
  - **SVG Filters** - Advanced visual effects with feTurbulence and feDisplacementMap
205
219
 
206
- ## 📦 Available Formats
220
+ ## Package Formats
207
221
 
208
222
  This package includes multiple formats for maximum compatibility:
209
223
 
@@ -211,7 +225,7 @@ This package includes multiple formats for maximum compatibility:
211
225
  - **UMD** (`dist/index.umd.js`) - For universal compatibility
212
226
  - **TypeScript** (`dist/index.d.ts`) - Type definitions
213
227
 
214
- ## 🤝 Contributing
228
+ ## Contributing
215
229
 
216
230
  Contributions are welcome! Please:
217
231
 
@@ -221,10 +235,10 @@ Contributions are welcome! Please:
221
235
  4. Push to the branch (`git push origin feature/amazing-feature`)
222
236
  5. Open a Pull Request
223
237
 
224
- ## 📄 License
238
+ ## License
225
239
 
226
240
  MIT © [creativoma](https://github.com/creativoma)
227
241
 
228
- ## 📜 Changelog
242
+ ## Changelog
229
243
 
230
244
  See [CHANGELOG.md](./CHANGELOG.md) for a detailed list of changes.
@@ -1 +1 @@
1
- {"version":3,"file":"LiquidGlass.d.ts","sourceRoot":"","sources":["../../src/components/LiquidGlass.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAS,MAAM,OAAO,CAAA;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,QAAA,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAuGrC,CAAA;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"LiquidGlass.d.ts","sourceRoot":"","sources":["../../src/components/LiquidGlass.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAS,MAAM,OAAO,CAAA;AACjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAG/C,QAAA,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CA6IrC,CAAA;AAED,eAAe,WAAW,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Custom hook for detecting browser capabilities
3
+ * Returns whether a simplified filter should be used for Safari/iOS
4
+ */
5
+ export declare const useBrowserDetection: () => {
6
+ useSimplifiedFilter: boolean;
7
+ };
8
+ //# sourceMappingURL=useBrowserDetection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBrowserDetection.d.ts","sourceRoot":"","sources":["../../src/hooks/useBrowserDetection.ts"],"names":[],"mappings":"AAsBA;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;CAM/B,CAAA"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { default as LiquidGlass } from './components/LiquidGlass';
2
2
  export type { LiquidGlassProps } from './components/types';
3
+ export { useBrowserDetection } from './hooks/useBrowserDetection';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AAEpB,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACjE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AAEpB,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACjE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA"}
package/dist/index.esm.js CHANGED
@@ -1,46 +1,46 @@
1
- import ee, { useId as re } from "react";
2
- var x = { exports: {} }, E = {};
3
- var L;
4
- function te() {
5
- if (L) return E;
6
- L = 1;
7
- var i = Symbol.for("react.transitional.element"), m = Symbol.for("react.fragment");
8
- function u(c, s, l) {
1
+ import ee, { useState as re, useId as te } from "react";
2
+ var h = { exports: {} }, v = {};
3
+ var D;
4
+ function ne() {
5
+ if (D) return v;
6
+ D = 1;
7
+ var s = /* @__PURE__ */ Symbol.for("react.transitional.element"), c = /* @__PURE__ */ Symbol.for("react.fragment");
8
+ function u(d, l, i) {
9
9
  var f = null;
10
- if (l !== void 0 && (f = "" + l), s.key !== void 0 && (f = "" + s.key), "key" in s) {
11
- l = {};
12
- for (var d in s)
13
- d !== "key" && (l[d] = s[d]);
14
- } else l = s;
15
- return s = l.ref, {
16
- $$typeof: i,
17
- type: c,
10
+ if (i !== void 0 && (f = "" + i), l.key !== void 0 && (f = "" + l.key), "key" in l) {
11
+ i = {};
12
+ for (var m in l)
13
+ m !== "key" && (i[m] = l[m]);
14
+ } else i = l;
15
+ return l = i.ref, {
16
+ $$typeof: s,
17
+ type: d,
18
18
  key: f,
19
- ref: s !== void 0 ? s : null,
20
- props: l
19
+ ref: l !== void 0 ? l : null,
20
+ props: i
21
21
  };
22
22
  }
23
- return E.Fragment = m, E.jsx = u, E.jsxs = u, E;
23
+ return v.Fragment = c, v.jsx = u, v.jsxs = u, v;
24
24
  }
25
25
  var _ = {};
26
- var D;
27
- function ne() {
28
- return D || (D = 1, process.env.NODE_ENV !== "production" && (function() {
29
- function i(e) {
26
+ var L;
27
+ function ae() {
28
+ return L || (L = 1, process.env.NODE_ENV !== "production" && (function() {
29
+ function s(e) {
30
30
  if (e == null) return null;
31
31
  if (typeof e == "function")
32
32
  return e.$$typeof === Z ? null : e.displayName || e.name || null;
33
33
  if (typeof e == "string") return e;
34
34
  switch (e) {
35
- case k:
35
+ case y:
36
36
  return "Fragment";
37
- case z:
37
+ case U:
38
38
  return "Profiler";
39
- case q:
39
+ case W:
40
40
  return "StrictMode";
41
- case V:
41
+ case J:
42
42
  return "Suspense";
43
- case B:
43
+ case V:
44
44
  return "SuspenseList";
45
45
  case H:
46
46
  return "Activity";
@@ -49,62 +49,62 @@ function ne() {
49
49
  switch (typeof e.tag == "number" && console.error(
50
50
  "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
51
51
  ), e.$$typeof) {
52
- case W:
52
+ case G:
53
53
  return "Portal";
54
- case U:
54
+ case z:
55
55
  return e.displayName || "Context";
56
- case G:
56
+ case q:
57
57
  return (e._context.displayName || "Context") + ".Consumer";
58
- case J:
58
+ case B:
59
59
  var r = e.render;
60
60
  return e = e.displayName, e || (e = r.displayName || r.name || "", e = e !== "" ? "ForwardRef(" + e + ")" : "ForwardRef"), e;
61
61
  case X:
62
- return r = e.displayName || null, r !== null ? r : i(e.type) || "Memo";
63
- case j:
62
+ return r = e.displayName || null, r !== null ? r : s(e.type) || "Memo";
63
+ case k:
64
64
  r = e._payload, e = e._init;
65
65
  try {
66
- return i(e(r));
66
+ return s(e(r));
67
67
  } catch {
68
68
  }
69
69
  }
70
70
  return null;
71
71
  }
72
- function m(e) {
72
+ function c(e) {
73
73
  return "" + e;
74
74
  }
75
75
  function u(e) {
76
76
  try {
77
- m(e);
77
+ c(e);
78
78
  var r = !1;
79
79
  } catch {
80
80
  r = !0;
81
81
  }
82
82
  if (r) {
83
83
  r = console;
84
- var t = r.error, n = typeof Symbol == "function" && Symbol.toStringTag && e[Symbol.toStringTag] || e.constructor.name || "Object";
85
- return t.call(
84
+ var n = r.error, a = typeof Symbol == "function" && Symbol.toStringTag && e[Symbol.toStringTag] || e.constructor.name || "Object";
85
+ return n.call(
86
86
  r,
87
87
  "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
88
- n
89
- ), m(e);
88
+ a
89
+ ), c(e);
90
90
  }
91
91
  }
92
- function c(e) {
93
- if (e === k) return "<>";
94
- if (typeof e == "object" && e !== null && e.$$typeof === j)
92
+ function d(e) {
93
+ if (e === y) return "<>";
94
+ if (typeof e == "object" && e !== null && e.$$typeof === k)
95
95
  return "<...>";
96
96
  try {
97
- var r = i(e);
97
+ var r = s(e);
98
98
  return r ? "<" + r + ">" : "<...>";
99
99
  } catch {
100
100
  return "<...>";
101
101
  }
102
102
  }
103
- function s() {
104
- var e = y.A;
103
+ function l() {
104
+ var e = S.A;
105
105
  return e === null ? null : e.getOwner();
106
106
  }
107
- function l() {
107
+ function i() {
108
108
  return Error("react-stack-top-frame");
109
109
  }
110
110
  function f(e) {
@@ -114,33 +114,33 @@ function ne() {
114
114
  }
115
115
  return e.key !== void 0;
116
116
  }
117
- function d(e, r) {
118
- function t() {
117
+ function m(e, r) {
118
+ function n() {
119
119
  C || (C = !0, console.error(
120
120
  "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",
121
121
  r
122
122
  ));
123
123
  }
124
- t.isReactWarning = !0, Object.defineProperty(e, "key", {
125
- get: t,
124
+ n.isReactWarning = !0, Object.defineProperty(e, "key", {
125
+ get: n,
126
126
  configurable: !0
127
127
  });
128
128
  }
129
129
  function T() {
130
- var e = i(this.type);
130
+ var e = s(this.type);
131
131
  return F[e] || (F[e] = !0, console.error(
132
132
  "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."
133
133
  )), e = this.props.ref, e !== void 0 ? e : null;
134
134
  }
135
- function g(e, r, t, n, R, O) {
136
- var a = t.ref;
135
+ function g(e, r, n, a, R, O) {
136
+ var o = n.ref;
137
137
  return e = {
138
138
  $$typeof: P,
139
139
  type: e,
140
140
  key: r,
141
- props: t,
142
- _owner: n
143
- }, (a !== void 0 ? a : null) !== null ? Object.defineProperty(e, "ref", {
141
+ props: n,
142
+ _owner: a
143
+ }, (o !== void 0 ? o : null) !== null ? Object.defineProperty(e, "ref", {
144
144
  enumerable: !1,
145
145
  get: T
146
146
  }) : Object.defineProperty(e, "ref", { enumerable: !1, value: null }), e._store = {}, Object.defineProperty(e._store, "validated", {
@@ -165,214 +165,269 @@ function ne() {
165
165
  value: O
166
166
  }), Object.freeze && (Object.freeze(e.props), Object.freeze(e)), e;
167
167
  }
168
- function h(e, r, t, n, R, O) {
169
- var a = r.children;
170
- if (a !== void 0)
171
- if (n)
172
- if (Q(a)) {
173
- for (n = 0; n < a.length; n++)
174
- b(a[n]);
175
- Object.freeze && Object.freeze(a);
168
+ function j(e, r, n, a, R, O) {
169
+ var o = r.children;
170
+ if (o !== void 0)
171
+ if (a)
172
+ if (Q(o)) {
173
+ for (a = 0; a < o.length; a++)
174
+ p(o[a]);
175
+ Object.freeze && Object.freeze(o);
176
176
  } else
177
177
  console.error(
178
178
  "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
179
179
  );
180
- else b(a);
180
+ else p(o);
181
181
  if (N.call(r, "key")) {
182
- a = i(e);
183
- var p = Object.keys(r).filter(function(K) {
182
+ o = s(e);
183
+ var b = Object.keys(r).filter(function(K) {
184
184
  return K !== "key";
185
185
  });
186
- n = 0 < p.length ? "{key: someKey, " + p.join(": ..., ") + ": ...}" : "{key: someKey}", Y[a + n] || (p = 0 < p.length ? "{" + p.join(": ..., ") + ": ...}" : "{}", console.error(
186
+ a = 0 < b.length ? "{key: someKey, " + b.join(": ..., ") + ": ...}" : "{key: someKey}", Y[o + a] || (b = 0 < b.length ? "{" + b.join(": ..., ") + ": ...}" : "{}", console.error(
187
187
  `A props object containing a "key" prop is being spread into JSX:
188
188
  let props = %s;
189
189
  <%s {...props} />
190
190
  React keys must be passed directly to JSX without using spread:
191
191
  let props = %s;
192
192
  <%s key={someKey} {...props} />`,
193
- n,
194
193
  a,
195
- p,
196
- a
197
- ), Y[a + n] = !0);
194
+ o,
195
+ b,
196
+ o
197
+ ), Y[o + a] = !0);
198
198
  }
199
- if (a = null, t !== void 0 && (u(t), a = "" + t), f(r) && (u(r.key), a = "" + r.key), "key" in r) {
200
- t = {};
201
- for (var w in r)
202
- w !== "key" && (t[w] = r[w]);
203
- } else t = r;
204
- return a && d(
205
- t,
199
+ if (o = null, n !== void 0 && (u(n), o = "" + n), f(r) && (u(r.key), o = "" + r.key), "key" in r) {
200
+ n = {};
201
+ for (var A in r)
202
+ A !== "key" && (n[A] = r[A]);
203
+ } else n = r;
204
+ return o && m(
205
+ n,
206
206
  typeof e == "function" ? e.displayName || e.name || "Unknown" : e
207
207
  ), g(
208
208
  e,
209
- a,
210
- t,
211
- s(),
209
+ o,
210
+ n,
211
+ l(),
212
212
  R,
213
213
  O
214
214
  );
215
215
  }
216
- function b(e) {
217
- A(e) ? e._store && (e._store.validated = 1) : typeof e == "object" && e !== null && e.$$typeof === j && (e._payload.status === "fulfilled" ? A(e._payload.value) && e._payload.value._store && (e._payload.value._store.validated = 1) : e._store && (e._store.validated = 1));
216
+ function p(e) {
217
+ E(e) ? e._store && (e._store.validated = 1) : typeof e == "object" && e !== null && e.$$typeof === k && (e._payload.status === "fulfilled" ? E(e._payload.value) && e._payload.value._store && (e._payload.value._store.validated = 1) : e._store && (e._store.validated = 1));
218
218
  }
219
- function A(e) {
219
+ function E(e) {
220
220
  return typeof e == "object" && e !== null && e.$$typeof === P;
221
221
  }
222
- var v = ee, P = Symbol.for("react.transitional.element"), W = Symbol.for("react.portal"), k = Symbol.for("react.fragment"), q = Symbol.for("react.strict_mode"), z = Symbol.for("react.profiler"), G = Symbol.for("react.consumer"), U = Symbol.for("react.context"), J = Symbol.for("react.forward_ref"), V = Symbol.for("react.suspense"), B = Symbol.for("react.suspense_list"), X = Symbol.for("react.memo"), j = Symbol.for("react.lazy"), H = Symbol.for("react.activity"), Z = Symbol.for("react.client.reference"), y = v.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, N = Object.prototype.hasOwnProperty, Q = Array.isArray, S = console.createTask ? console.createTask : function() {
222
+ var x = ee, P = /* @__PURE__ */ Symbol.for("react.transitional.element"), G = /* @__PURE__ */ Symbol.for("react.portal"), y = /* @__PURE__ */ Symbol.for("react.fragment"), W = /* @__PURE__ */ Symbol.for("react.strict_mode"), U = /* @__PURE__ */ Symbol.for("react.profiler"), q = /* @__PURE__ */ Symbol.for("react.consumer"), z = /* @__PURE__ */ Symbol.for("react.context"), B = /* @__PURE__ */ Symbol.for("react.forward_ref"), J = /* @__PURE__ */ Symbol.for("react.suspense"), V = /* @__PURE__ */ Symbol.for("react.suspense_list"), X = /* @__PURE__ */ Symbol.for("react.memo"), k = /* @__PURE__ */ Symbol.for("react.lazy"), H = /* @__PURE__ */ Symbol.for("react.activity"), Z = /* @__PURE__ */ Symbol.for("react.client.reference"), S = x.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, N = Object.prototype.hasOwnProperty, Q = Array.isArray, w = console.createTask ? console.createTask : function() {
223
223
  return null;
224
224
  };
225
- v = {
225
+ x = {
226
226
  react_stack_bottom_frame: function(e) {
227
227
  return e();
228
228
  }
229
229
  };
230
- var C, F = {}, $ = v.react_stack_bottom_frame.bind(
231
- v,
232
- l
233
- )(), I = S(c(l)), Y = {};
234
- _.Fragment = k, _.jsx = function(e, r, t) {
235
- var n = 1e4 > y.recentlyCreatedOwnerStacks++;
236
- return h(
230
+ var C, F = {}, I = x.react_stack_bottom_frame.bind(
231
+ x,
232
+ i
233
+ )(), $ = w(d(i)), Y = {};
234
+ _.Fragment = y, _.jsx = function(e, r, n) {
235
+ var a = 1e4 > S.recentlyCreatedOwnerStacks++;
236
+ return j(
237
237
  e,
238
238
  r,
239
- t,
239
+ n,
240
240
  !1,
241
- n ? Error("react-stack-top-frame") : $,
242
- n ? S(c(e)) : I
241
+ a ? Error("react-stack-top-frame") : I,
242
+ a ? w(d(e)) : $
243
243
  );
244
- }, _.jsxs = function(e, r, t) {
245
- var n = 1e4 > y.recentlyCreatedOwnerStacks++;
246
- return h(
244
+ }, _.jsxs = function(e, r, n) {
245
+ var a = 1e4 > S.recentlyCreatedOwnerStacks++;
246
+ return j(
247
247
  e,
248
248
  r,
249
- t,
249
+ n,
250
250
  !0,
251
- n ? Error("react-stack-top-frame") : $,
252
- n ? S(c(e)) : I
251
+ a ? Error("react-stack-top-frame") : I,
252
+ a ? w(d(e)) : $
253
253
  );
254
254
  };
255
255
  })()), _;
256
256
  }
257
257
  var M;
258
- function ae() {
259
- return M || (M = 1, process.env.NODE_ENV === "production" ? x.exports = te() : x.exports = ne()), x.exports;
258
+ function oe() {
259
+ return M || (M = 1, process.env.NODE_ENV === "production" ? h.exports = ne() : h.exports = ae()), h.exports;
260
260
  }
261
- var o = ae();
262
- const se = ({
263
- children: i,
264
- className: m = "",
261
+ var t = oe();
262
+ const se = /iPad|iPhone|iPod/, le = /^((?!chrome|android).)*safari/i, ie = () => {
263
+ if (typeof window > "u") return !1;
264
+ const s = window.navigator.userAgent, c = se.test(s), u = le.test(s);
265
+ return c || u;
266
+ }, ue = () => {
267
+ const [s] = re(() => ie());
268
+ return { useSimplifiedFilter: s };
269
+ }, fe = ({
270
+ children: s,
271
+ className: c = "",
265
272
  backdropBlur: u = 2,
266
- tintColor: c = "rgba(255, 255, 255, .2)",
267
- displacementScale: s = 150,
268
- turbulenceBaseFrequency: l = "0.008 0.008",
273
+ tintColor: d = "rgba(255, 255, 255, .2)",
274
+ displacementScale: l = 150,
275
+ turbulenceBaseFrequency: i = "0.008 0.008",
269
276
  turbulenceSeed: f = 1.5,
270
- as: d = "div",
277
+ as: m = "div",
271
278
  style: T,
272
279
  ...g
273
280
  }) => {
274
- const b = `liquid-glass-${re().replace(/:/g, "-")}`;
275
- return /* @__PURE__ */ o.jsxs(o.Fragment, { children: [
276
- /* @__PURE__ */ o.jsx("svg", { style: { display: "none" }, children: /* @__PURE__ */ o.jsxs(
277
- "filter",
278
- {
279
- id: b,
280
- x: "0%",
281
- y: "0%",
282
- width: "100%",
283
- height: "100%",
284
- filterUnits: "objectBoundingBox",
285
- children: [
286
- /* @__PURE__ */ o.jsx(
287
- "feTurbulence",
288
- {
289
- type: "fractalNoise",
290
- baseFrequency: l,
291
- numOctaves: 1,
292
- seed: f,
293
- result: "turbulence"
294
- }
295
- ),
296
- /* @__PURE__ */ o.jsxs("feComponentTransfer", { in: "turbulence", result: "mapped", children: [
297
- /* @__PURE__ */ o.jsx("feFuncR", { type: "gamma", amplitude: 1, exponent: 10, offset: 0.5 }),
298
- /* @__PURE__ */ o.jsx("feFuncG", { type: "gamma", amplitude: 0, exponent: 1, offset: 0 }),
299
- /* @__PURE__ */ o.jsx("feFuncB", { type: "gamma", amplitude: 0, exponent: 1, offset: 0.5 })
300
- ] }),
301
- /* @__PURE__ */ o.jsx("feGaussianBlur", { in: "turbulence", stdDeviation: 3, result: "softMap" }),
302
- /* @__PURE__ */ o.jsx(
303
- "feSpecularLighting",
304
- {
305
- in: "softMap",
306
- surfaceScale: 5,
307
- specularConstant: 1,
308
- specularExponent: 100,
309
- lightingColor: "white",
310
- result: "specLight",
311
- children: /* @__PURE__ */ o.jsx("fePointLight", { x: -200, y: -200, z: 300 })
312
- }
313
- ),
314
- /* @__PURE__ */ o.jsx(
315
- "feComposite",
316
- {
317
- in: "specLight",
318
- operator: "arithmetic",
319
- k1: 0,
320
- k2: 1,
321
- k3: 1,
322
- k4: 0,
323
- result: "litImage"
324
- }
325
- ),
326
- /* @__PURE__ */ o.jsx(
327
- "feDisplacementMap",
328
- {
329
- in: "SourceGraphic",
330
- in2: "softMap",
331
- scale: s,
332
- xChannelSelector: "R",
333
- yChannelSelector: "G"
334
- }
335
- )
336
- ]
337
- }
281
+ const p = `liquid-glass-${te().replace(/:/g, "-")}`, { useSimplifiedFilter: E } = ue();
282
+ return /* @__PURE__ */ t.jsxs(t.Fragment, { children: [
283
+ /* @__PURE__ */ t.jsx("svg", { style: { display: "none" }, suppressHydrationWarning: !0, children: E ? (
284
+ // Simplified filter for Safari/iOS - uses only well-supported primitives
285
+ /* @__PURE__ */ t.jsxs(
286
+ "filter",
287
+ {
288
+ id: p,
289
+ x: "-20%",
290
+ y: "-20%",
291
+ width: "140%",
292
+ height: "140%",
293
+ filterUnits: "objectBoundingBox",
294
+ children: [
295
+ /* @__PURE__ */ t.jsx(
296
+ "feTurbulence",
297
+ {
298
+ type: "fractalNoise",
299
+ baseFrequency: i,
300
+ numOctaves: 2,
301
+ seed: f,
302
+ result: "turbulence"
303
+ }
304
+ ),
305
+ /* @__PURE__ */ t.jsx("feGaussianBlur", { in: "turbulence", stdDeviation: "2", result: "blur" }),
306
+ /* @__PURE__ */ t.jsx(
307
+ "feColorMatrix",
308
+ {
309
+ in: "blur",
310
+ type: "matrix",
311
+ values: `1 0 0 0 0
312
+ 0 1 0 0 0
313
+ 0 0 1 0 0
314
+ 0 0 0 0.15 0`,
315
+ result: "transparency"
316
+ }
317
+ ),
318
+ /* @__PURE__ */ t.jsx("feBlend", { in: "SourceGraphic", in2: "transparency", mode: "normal" })
319
+ ]
320
+ }
321
+ )
322
+ ) : (
323
+ // Full-featured filter for non-Safari browsers
324
+ /* @__PURE__ */ t.jsxs(
325
+ "filter",
326
+ {
327
+ id: p,
328
+ x: "0%",
329
+ y: "0%",
330
+ width: "100%",
331
+ height: "100%",
332
+ filterUnits: "objectBoundingBox",
333
+ children: [
334
+ /* @__PURE__ */ t.jsx(
335
+ "feTurbulence",
336
+ {
337
+ type: "fractalNoise",
338
+ baseFrequency: i,
339
+ numOctaves: 1,
340
+ seed: f,
341
+ result: "turbulence"
342
+ }
343
+ ),
344
+ /* @__PURE__ */ t.jsxs("feComponentTransfer", { in: "turbulence", result: "mapped", children: [
345
+ /* @__PURE__ */ t.jsx("feFuncR", { type: "gamma", amplitude: 1, exponent: 10, offset: 0.5 }),
346
+ /* @__PURE__ */ t.jsx("feFuncG", { type: "gamma", amplitude: 0, exponent: 1, offset: 0 }),
347
+ /* @__PURE__ */ t.jsx("feFuncB", { type: "gamma", amplitude: 0, exponent: 1, offset: 0.5 })
348
+ ] }),
349
+ /* @__PURE__ */ t.jsx("feGaussianBlur", { in: "turbulence", stdDeviation: 3, result: "softMap" }),
350
+ /* @__PURE__ */ t.jsx(
351
+ "feSpecularLighting",
352
+ {
353
+ in: "softMap",
354
+ surfaceScale: 5,
355
+ specularConstant: 1,
356
+ specularExponent: 100,
357
+ lightingColor: "white",
358
+ result: "specLight",
359
+ children: /* @__PURE__ */ t.jsx("fePointLight", { x: -200, y: -200, z: 300 })
360
+ }
361
+ ),
362
+ /* @__PURE__ */ t.jsx(
363
+ "feComposite",
364
+ {
365
+ in: "specLight",
366
+ operator: "arithmetic",
367
+ k1: 0,
368
+ k2: 1,
369
+ k3: 1,
370
+ k4: 0,
371
+ result: "litImage"
372
+ }
373
+ ),
374
+ /* @__PURE__ */ t.jsx(
375
+ "feDisplacementMap",
376
+ {
377
+ in: "SourceGraphic",
378
+ in2: "softMap",
379
+ scale: l,
380
+ xChannelSelector: "R",
381
+ yChannelSelector: "G"
382
+ }
383
+ )
384
+ ]
385
+ }
386
+ )
338
387
  ) }),
339
- /* @__PURE__ */ o.jsxs(
340
- d,
388
+ /* @__PURE__ */ t.jsxs(
389
+ m,
341
390
  {
342
- className: `relative overflow-hidden ${m}`,
391
+ className: `relative overflow-hidden ${c}`,
343
392
  style: {
344
393
  boxShadow: "0 6px 6px rgba(0, 0, 0, 0.2), 0 0 20px rgba(0, 0, 0, 0.1)",
345
394
  ...T
346
395
  },
347
396
  ...g,
348
397
  children: [
349
- /* @__PURE__ */ o.jsx(
398
+ /* @__PURE__ */ t.jsx(
350
399
  "div",
351
400
  {
352
401
  className: "absolute inset-0 z-0 overflow-hidden",
353
402
  style: {
354
403
  backdropFilter: `blur(${u}px)`,
355
404
  WebkitBackdropFilter: `blur(${u}px)`,
356
- filter: `url(#${b})`,
357
- isolation: "isolate"
405
+ filter: `url(#${p})`,
406
+ isolation: "isolate",
407
+ ...E && {
408
+ // Additional CSS-based effects for Safari/iOS to enhance the liquid glass appearance
409
+ transform: "translateZ(0)",
410
+ willChange: "transform"
411
+ }
358
412
  }
359
413
  }
360
414
  ),
361
- /* @__PURE__ */ o.jsx(
415
+ /* @__PURE__ */ t.jsx(
362
416
  "div",
363
417
  {
364
418
  className: "absolute inset-0 z-[1]",
365
419
  style: {
366
- background: c
420
+ background: d
367
421
  }
368
422
  }
369
423
  ),
370
- /* @__PURE__ */ o.jsx("div", { className: "relative z-[2]", children: i })
424
+ /* @__PURE__ */ t.jsx("div", { className: "relative z-[2]", children: s })
371
425
  ]
372
426
  }
373
427
  )
374
428
  ] });
375
429
  };
376
430
  export {
377
- se as LiquidGlass
431
+ fe as LiquidGlass,
432
+ ue as useBrowserDetection
378
433
  };
package/dist/index.umd.js CHANGED
@@ -1,6 +1,9 @@
1
- (function(c,p){typeof exports=="object"&&typeof module<"u"?p(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],p):(c=typeof globalThis<"u"?globalThis:c||self,p(c.LiquidGlass={},c.React))})(this,(function(c,p){"use strict";var x={exports:{}},_={};var N;function W(){if(N)return _;N=1;var i=Symbol.for("react.transitional.element"),b=Symbol.for("react.fragment");function u(f,s,l){var d=null;if(l!==void 0&&(d=""+l),s.key!==void 0&&(d=""+s.key),"key"in s){l={};for(var m in s)m!=="key"&&(l[m]=s[m])}else l=s;return s=l.ref,{$$typeof:i,type:f,key:d,ref:s!==void 0?s:null,props:l}}return _.Fragment=b,_.jsx=u,_.jsxs=u,_}var v={};var C;function z(){return C||(C=1,process.env.NODE_ENV!=="production"&&(function(){function i(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===ne?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case y:return"Fragment";case X:return"Profiler";case B:return"StrictMode";case K:return"Suspense";case ee:return"SuspenseList";case te:return"Activity"}if(typeof e=="object")switch(typeof e.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),e.$$typeof){case V:return"Portal";case Z:return e.displayName||"Context";case H:return(e._context.displayName||"Context")+".Consumer";case Q:var r=e.render;return e=e.displayName,e||(e=r.displayName||r.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case re:return r=e.displayName||null,r!==null?r:i(e.type)||"Memo";case S:r=e._payload,e=e._init;try{return i(e(r))}catch{}}return null}function b(e){return""+e}function u(e){try{b(e);var r=!1}catch{r=!0}if(r){r=console;var t=r.error,n=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return t.call(r,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",n),b(e)}}function f(e){if(e===y)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===S)return"<...>";try{var r=i(e);return r?"<"+r+">":"<...>"}catch{return"<...>"}}function s(){var e=O.A;return e===null?null:e.getOwner()}function l(){return Error("react-stack-top-frame")}function d(e){if(L.call(e,"key")){var r=Object.getOwnPropertyDescriptor(e,"key").get;if(r&&r.isReactWarning)return!1}return e.key!==void 0}function m(e,r){function t(){$||($=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",r))}t.isReactWarning=!0,Object.defineProperty(e,"key",{get:t,configurable:!0})}function g(){var e=i(this.type);return M[e]||(M[e]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),e=this.props.ref,e!==void 0?e:null}function j(e,r,t,n,h,A){var a=t.ref;return e={$$typeof:Y,type:e,key:r,props:t,_owner:n},(a!==void 0?a:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:g}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:h}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:A}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function k(e,r,t,n,h,A){var a=r.children;if(a!==void 0)if(n)if(ae(a)){for(n=0;n<a.length;n++)R(a[n]);Object.freeze&&Object.freeze(a)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else R(a);if(L.call(r,"key")){a=i(e);var E=Object.keys(r).filter(function(oe){return oe!=="key"});n=0<E.length?"{key: someKey, "+E.join(": ..., ")+": ...}":"{key: someKey}",q[a+n]||(E=0<E.length?"{"+E.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
1
+ (function(c,m){typeof exports=="object"&&typeof module<"u"?m(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],m):(c=typeof globalThis<"u"?globalThis:c||self,m(c.LiquidGlass={},c.React))})(this,(function(c,m){"use strict";var h={exports:{}},_={};var C;function q(){if(C)return _;C=1;var o=Symbol.for("react.transitional.element"),f=Symbol.for("react.fragment");function u(p,i,l){var d=null;if(l!==void 0&&(d=""+l),i.key!==void 0&&(d=""+i.key),"key"in i){l={};for(var b in i)b!=="key"&&(l[b]=i[b])}else l=i;return i=l.ref,{$$typeof:o,type:p,key:d,ref:i!==void 0?i:null,props:l}}return _.Fragment=f,_.jsx=u,_.jsxs=u,_}var x={};var F;function z(){return F||(F=1,process.env.NODE_ENV!=="production"&&(function(){function o(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===ie?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case k:return"Fragment";case K:return"Profiler";case Q:return"StrictMode";case ne:return"Suspense";case ae:return"SuspenseList";case oe:return"Activity"}if(typeof e=="object")switch(typeof e.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),e.$$typeof){case Z:return"Portal";case re:return e.displayName||"Context";case ee:return(e._context.displayName||"Context")+".Consumer";case te:var r=e.render;return e=e.displayName,e||(e=r.displayName||r.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case se:return r=e.displayName||null,r!==null?r:o(e.type)||"Memo";case w:r=e._payload,e=e._init;try{return o(e(r))}catch{}}return null}function f(e){return""+e}function u(e){try{f(e);var r=!1}catch{r=!0}if(r){r=console;var n=r.error,a=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return n.call(r,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",a),f(e)}}function p(e){if(e===k)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===w)return"<...>";try{var r=o(e);return r?"<"+r+">":"<...>"}catch{return"<...>"}}function i(){var e=O.A;return e===null?null:e.getOwner()}function l(){return Error("react-stack-top-frame")}function d(e){if(D.call(e,"key")){var r=Object.getOwnPropertyDescriptor(e,"key").get;if(r&&r.isReactWarning)return!1}return e.key!==void 0}function b(e,r){function n(){G||(G=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",r))}n.isReactWarning=!0,Object.defineProperty(e,"key",{get:n,configurable:!0})}function j(){var e=o(this.type);return M[e]||(M[e]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),e=this.props.ref,e!==void 0?e:null}function y(e,r,n,a,g,P){var s=n.ref;return e={$$typeof:L,type:e,key:r,props:n,_owner:a},(s!==void 0?s:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:j}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:g}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:P}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function S(e,r,n,a,g,P){var s=r.children;if(s!==void 0)if(a)if(le(s)){for(a=0;a<s.length;a++)E(s[a]);Object.freeze&&Object.freeze(s)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else E(s);if(D.call(r,"key")){s=o(e);var v=Object.keys(r).filter(function(ue){return ue!=="key"});a=0<v.length?"{key: someKey, "+v.join(": ..., ")+": ...}":"{key: someKey}",U[s+a]||(v=0<v.length?"{"+v.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
2
2
  let props = %s;
3
3
  <%s {...props} />
4
4
  React keys must be passed directly to JSX without using spread:
5
5
  let props = %s;
6
- <%s key={someKey} {...props} />`,n,a,E,a),q[a+n]=!0)}if(a=null,t!==void 0&&(u(t),a=""+t),d(r)&&(u(r.key),a=""+r.key),"key"in r){t={};for(var P in r)P!=="key"&&(t[P]=r[P])}else t=r;return a&&m(t,typeof e=="function"?e.displayName||e.name||"Unknown":e),j(e,a,t,s(),h,A)}function R(e){I(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===S&&(e._payload.status==="fulfilled"?I(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function I(e){return typeof e=="object"&&e!==null&&e.$$typeof===Y}var T=p,Y=Symbol.for("react.transitional.element"),V=Symbol.for("react.portal"),y=Symbol.for("react.fragment"),B=Symbol.for("react.strict_mode"),X=Symbol.for("react.profiler"),H=Symbol.for("react.consumer"),Z=Symbol.for("react.context"),Q=Symbol.for("react.forward_ref"),K=Symbol.for("react.suspense"),ee=Symbol.for("react.suspense_list"),re=Symbol.for("react.memo"),S=Symbol.for("react.lazy"),te=Symbol.for("react.activity"),ne=Symbol.for("react.client.reference"),O=T.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,L=Object.prototype.hasOwnProperty,ae=Array.isArray,w=console.createTask?console.createTask:function(){return null};T={react_stack_bottom_frame:function(e){return e()}};var $,M={},D=T.react_stack_bottom_frame.bind(T,l)(),G=w(f(l)),q={};v.Fragment=y,v.jsx=function(e,r,t){var n=1e4>O.recentlyCreatedOwnerStacks++;return k(e,r,t,!1,n?Error("react-stack-top-frame"):D,n?w(f(e)):G)},v.jsxs=function(e,r,t){var n=1e4>O.recentlyCreatedOwnerStacks++;return k(e,r,t,!0,n?Error("react-stack-top-frame"):D,n?w(f(e)):G)}})()),v}var F;function U(){return F||(F=1,process.env.NODE_ENV==="production"?x.exports=W():x.exports=z()),x.exports}var o=U();const J=({children:i,className:b="",backdropBlur:u=2,tintColor:f="rgba(255, 255, 255, .2)",displacementScale:s=150,turbulenceBaseFrequency:l="0.008 0.008",turbulenceSeed:d=1.5,as:m="div",style:g,...j})=>{const R=`liquid-glass-${p.useId().replace(/:/g,"-")}`;return o.jsxs(o.Fragment,{children:[o.jsx("svg",{style:{display:"none"},children:o.jsxs("filter",{id:R,x:"0%",y:"0%",width:"100%",height:"100%",filterUnits:"objectBoundingBox",children:[o.jsx("feTurbulence",{type:"fractalNoise",baseFrequency:l,numOctaves:1,seed:d,result:"turbulence"}),o.jsxs("feComponentTransfer",{in:"turbulence",result:"mapped",children:[o.jsx("feFuncR",{type:"gamma",amplitude:1,exponent:10,offset:.5}),o.jsx("feFuncG",{type:"gamma",amplitude:0,exponent:1,offset:0}),o.jsx("feFuncB",{type:"gamma",amplitude:0,exponent:1,offset:.5})]}),o.jsx("feGaussianBlur",{in:"turbulence",stdDeviation:3,result:"softMap"}),o.jsx("feSpecularLighting",{in:"softMap",surfaceScale:5,specularConstant:1,specularExponent:100,lightingColor:"white",result:"specLight",children:o.jsx("fePointLight",{x:-200,y:-200,z:300})}),o.jsx("feComposite",{in:"specLight",operator:"arithmetic",k1:0,k2:1,k3:1,k4:0,result:"litImage"}),o.jsx("feDisplacementMap",{in:"SourceGraphic",in2:"softMap",scale:s,xChannelSelector:"R",yChannelSelector:"G"})]})}),o.jsxs(m,{className:`relative overflow-hidden ${b}`,style:{boxShadow:"0 6px 6px rgba(0, 0, 0, 0.2), 0 0 20px rgba(0, 0, 0, 0.1)",...g},...j,children:[o.jsx("div",{className:"absolute inset-0 z-0 overflow-hidden",style:{backdropFilter:`blur(${u}px)`,WebkitBackdropFilter:`blur(${u}px)`,filter:`url(#${R})`,isolation:"isolate"}}),o.jsx("div",{className:"absolute inset-0 z-[1]",style:{background:f}}),o.jsx("div",{className:"relative z-[2]",children:i})]})]})};c.LiquidGlass=J,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})}));
6
+ <%s key={someKey} {...props} />`,a,s,v,s),U[s+a]=!0)}if(s=null,n!==void 0&&(u(n),s=""+n),d(r)&&(u(r.key),s=""+r.key),"key"in r){n={};for(var N in r)N!=="key"&&(n[N]=r[N])}else n=r;return s&&b(n,typeof e=="function"?e.displayName||e.name||"Unknown":e),y(e,s,n,i(),g,P)}function E(e){R(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===w&&(e._payload.status==="fulfilled"?R(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function R(e){return typeof e=="object"&&e!==null&&e.$$typeof===L}var T=m,L=Symbol.for("react.transitional.element"),Z=Symbol.for("react.portal"),k=Symbol.for("react.fragment"),Q=Symbol.for("react.strict_mode"),K=Symbol.for("react.profiler"),ee=Symbol.for("react.consumer"),re=Symbol.for("react.context"),te=Symbol.for("react.forward_ref"),ne=Symbol.for("react.suspense"),ae=Symbol.for("react.suspense_list"),se=Symbol.for("react.memo"),w=Symbol.for("react.lazy"),oe=Symbol.for("react.activity"),ie=Symbol.for("react.client.reference"),O=T.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,D=Object.prototype.hasOwnProperty,le=Array.isArray,A=console.createTask?console.createTask:function(){return null};T={react_stack_bottom_frame:function(e){return e()}};var G,M={},$=T.react_stack_bottom_frame.bind(T,l)(),W=A(p(l)),U={};x.Fragment=k,x.jsx=function(e,r,n){var a=1e4>O.recentlyCreatedOwnerStacks++;return S(e,r,n,!1,a?Error("react-stack-top-frame"):$,a?A(p(e)):W)},x.jsxs=function(e,r,n){var a=1e4>O.recentlyCreatedOwnerStacks++;return S(e,r,n,!0,a?Error("react-stack-top-frame"):$,a?A(p(e)):W)}})()),x}var I;function B(){return I||(I=1,process.env.NODE_ENV==="production"?h.exports=q():h.exports=z()),h.exports}var t=B();const J=/iPad|iPhone|iPod/,V=/^((?!chrome|android).)*safari/i,X=()=>{if(typeof window>"u")return!1;const o=window.navigator.userAgent,f=J.test(o),u=V.test(o);return f||u},Y=()=>{const[o]=m.useState(()=>X());return{useSimplifiedFilter:o}},H=({children:o,className:f="",backdropBlur:u=2,tintColor:p="rgba(255, 255, 255, .2)",displacementScale:i=150,turbulenceBaseFrequency:l="0.008 0.008",turbulenceSeed:d=1.5,as:b="div",style:j,...y})=>{const E=`liquid-glass-${m.useId().replace(/:/g,"-")}`,{useSimplifiedFilter:R}=Y();return t.jsxs(t.Fragment,{children:[t.jsx("svg",{style:{display:"none"},suppressHydrationWarning:!0,children:R?t.jsxs("filter",{id:E,x:"-20%",y:"-20%",width:"140%",height:"140%",filterUnits:"objectBoundingBox",children:[t.jsx("feTurbulence",{type:"fractalNoise",baseFrequency:l,numOctaves:2,seed:d,result:"turbulence"}),t.jsx("feGaussianBlur",{in:"turbulence",stdDeviation:"2",result:"blur"}),t.jsx("feColorMatrix",{in:"blur",type:"matrix",values:`1 0 0 0 0
7
+ 0 1 0 0 0
8
+ 0 0 1 0 0
9
+ 0 0 0 0.15 0`,result:"transparency"}),t.jsx("feBlend",{in:"SourceGraphic",in2:"transparency",mode:"normal"})]}):t.jsxs("filter",{id:E,x:"0%",y:"0%",width:"100%",height:"100%",filterUnits:"objectBoundingBox",children:[t.jsx("feTurbulence",{type:"fractalNoise",baseFrequency:l,numOctaves:1,seed:d,result:"turbulence"}),t.jsxs("feComponentTransfer",{in:"turbulence",result:"mapped",children:[t.jsx("feFuncR",{type:"gamma",amplitude:1,exponent:10,offset:.5}),t.jsx("feFuncG",{type:"gamma",amplitude:0,exponent:1,offset:0}),t.jsx("feFuncB",{type:"gamma",amplitude:0,exponent:1,offset:.5})]}),t.jsx("feGaussianBlur",{in:"turbulence",stdDeviation:3,result:"softMap"}),t.jsx("feSpecularLighting",{in:"softMap",surfaceScale:5,specularConstant:1,specularExponent:100,lightingColor:"white",result:"specLight",children:t.jsx("fePointLight",{x:-200,y:-200,z:300})}),t.jsx("feComposite",{in:"specLight",operator:"arithmetic",k1:0,k2:1,k3:1,k4:0,result:"litImage"}),t.jsx("feDisplacementMap",{in:"SourceGraphic",in2:"softMap",scale:i,xChannelSelector:"R",yChannelSelector:"G"})]})}),t.jsxs(b,{className:`relative overflow-hidden ${f}`,style:{boxShadow:"0 6px 6px rgba(0, 0, 0, 0.2), 0 0 20px rgba(0, 0, 0, 0.1)",...j},...y,children:[t.jsx("div",{className:"absolute inset-0 z-0 overflow-hidden",style:{backdropFilter:`blur(${u}px)`,WebkitBackdropFilter:`blur(${u}px)`,filter:`url(#${E})`,isolation:"isolate",...R&&{transform:"translateZ(0)",willChange:"transform"}}}),t.jsx("div",{className:"absolute inset-0 z-[1]",style:{background:p}}),t.jsx("div",{className:"relative z-[2]",children:o})]})]})};c.LiquidGlass=H,c.useBrowserDetection=Y,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})}));
@@ -1 +1 @@
1
- @layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-blue-500:oklch(62.3% .214 259.815);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-lg:0 4px 4px #00000026;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.right-0{right:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.isolate{isolation:isolate}.-z-10{z-index:-10}.z-0{z-index:0}.z-50{z-index:50}.z-\[1\]{z-index:1}.z-\[2\]{z-index:2}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.flex{display:flex}.grid{display:grid}.inline{display:inline}.inline-block{display:inline-block}.aspect-square{aspect-ratio:1}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-full{width:100%}.max-w-5xl{max-width:var(--container-5xl)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.object-cover{-o-object-fit:cover;object-fit:cover}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-12{padding:calc(var(--spacing)*12)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-4{padding-block:calc(var(--spacing)*4)}.pt-8{padding-top:calc(var(--spacing)*8)}.text-center{text-align:center}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-white{color:var(--color-white)}.text-white\/60{color:#fff9}@supports (color:color-mix(in lab,red,red)){.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}}.text-white\/80{color:#fffc}@supports (color:color-mix(in lab,red,red)){.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}}.text-white\/90{color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}}.uppercase{text-transform:uppercase}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-lg{--tw-drop-shadow-size:drop-shadow(0 4px 4px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-lg));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-filter{backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media(hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}}@media(min-width:40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}@media(min-width:64rem){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}
1
+ @import"https://api.fontshare.com/v2/css?f[]=clash-display@400,500,600,700&f[]=satoshi@300,400,500,700,900&display=swap";@layer properties,theme,base,components,utilities;@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-green-400:oklch(79.2% .209 151.711);--color-blue-500:oklch(62.3% .214 259.815);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--text-7xl:4.5rem;--text-7xl--line-height:1;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:currentColor}::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::-moz-placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:root{--color-void:#0a0f1e;--color-void-light:#1a1f35;--color-electric-blue:#3b82f6;--color-electric-purple:#a855f7;--color-cyan-glow:#22d3ee;--color-indigo-deep:#4f46e5;--color-violet-bright:#8b5cf6;--color-sky-light:#60a5fa;--color-white-ghost:#f5f5f5;--gradient-void:radial-gradient(ellipse at top,#1a1f35,#0a0f1e);--gradient-electric:linear-gradient(135deg,var(--color-electric-purple)0%,var(--color-cyan-glow)100%);--gradient-ocean:linear-gradient(135deg,var(--color-electric-blue)0%,var(--color-indigo-deep)100%);--gradient-mesh:radial-gradient(at 20% 30%,#8b5cf633 0px,transparent 50%),radial-gradient(at 80% 70%,#3b82f633 0px,transparent 50%),radial-gradient(at 50% 50%,#4f46e526 0px,transparent 50%)}body{background:var(--color-void);color:var(--color-white-ghost);cursor:none;font-family:Satoshi,-apple-system,BlinkMacSystemFont,sans-serif;position:relative;overflow-x:hidden}h1,h2,h3,h4,h5,h6{letter-spacing:-.03em;font-family:Clash Display,system-ui,sans-serif;font-weight:600}.custom-cursor{background:var(--color-electric-purple);pointer-events:none;z-index:9999;mix-blend-mode:difference;border-radius:50%;width:20px;height:20px;transition:transform .15s;position:fixed}.custom-cursor:before{content:"";border:1px solid var(--color-white-ghost);opacity:.3;border-radius:50%;position:absolute;inset:-10px}}@layer utilities{.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-\[20\%\]{top:20%}.top-\[60\%\]{top:60%}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.right-\[15\%\]{right:15%}.bottom-\[10\%\]{bottom:10%}.left-0{left:calc(var(--spacing)*0)}.left-\[10\%\]{left:10%}.left-\[50\%\]{left:50%}.isolate{isolation:isolate}.-z-10{z-index:-10}.-z-15{z-index:-15}.-z-20{z-index:-20}.-z-25{z-index:-25}.-z-30{z-index:-30}.z-0{z-index:0}.z-50{z-index:50}.z-\[1\]{z-index:1}.z-\[2\]{z-index:2}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mt-6{margin-top:calc(var(--spacing)*6)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.block{display:block}.flex{display:flex}.grid{display:grid}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-\[350px\]{height:350px}.h-\[400px\]{height:400px}.h-\[500px\]{height:500px}.h-full{height:100%}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-3\/4{width:75%}.w-\[350px\]{width:350px}.w-\[400px\]{width:400px}.w-\[500px\]{width:500px}.w-full{width:100%}.max-w-7xl{max-width:var(--container-7xl)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-xl{max-width:var(--container-xl)}.flex-1{flex:1}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.overflow-hidden{overflow:hidden}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-\[var\(--color-electric-purple\)\]\/20{border-color:var(--color-electric-purple)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-electric-purple\)\]\/20{border-color:color-mix(in oklab,var(--color-electric-purple)20%,transparent)}}.border-\[var\(--color-electric-purple\)\]\/30{border-color:var(--color-electric-purple)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-electric-purple\)\]\/30{border-color:color-mix(in oklab,var(--color-electric-purple)30%,transparent)}}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-\[var\(--color-electric-blue\)\]{background-color:var(--color-electric-blue)}.bg-\[var\(--color-electric-purple\)\]{background-color:var(--color-electric-purple)}.bg-\[var\(--color-indigo-deep\)\]{background-color:var(--color-indigo-deep)}.bg-\[var\(--color-void\)\]{background-color:var(--color-void)}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[var\(--color-electric-purple\)\]{--tw-gradient-from:var(--color-electric-purple);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-\[var\(--color-cyan-glow\)\]{--tw-gradient-to:var(--color-cyan-glow);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-3{padding:calc(var(--spacing)*3)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-12{padding:calc(var(--spacing)*12)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-8{padding-block:calc(var(--spacing)*8)}.pr-10{padding-right:calc(var(--spacing)*10)}.text-center{text-align:center}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.leading-\[0\.95\]{--tw-leading:.95;line-height:.95}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-\[var\(--color-electric-purple\)\]{color:var(--color-electric-purple)}.text-green-400{color:var(--color-green-400)}.text-white{color:var(--color-white)}.text-white\/40{color:#fff6}@supports (color:color-mix(in lab,red,red)){.text-white\/40{color:color-mix(in oklab,var(--color-white)40%,transparent)}}.text-white\/60{color:#fff9}@supports (color:color-mix(in lab,red,red)){.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.text-white\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}}.text-white\/80{color:#fffc}@supports (color:color-mix(in lab,red,red)){.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}}.text-white\/90{color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}}.uppercase{text-transform:uppercase}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-60{opacity:.6}.mix-blend-luminosity{mix-blend-mode:luminosity}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-filter{backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.delay-100{transition-delay:.1s}.delay-300{transition-delay:.3s}.delay-1000{transition-delay:1s}@media(hover:hover){.hover\:scale-90:hover{--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.hover\:text-\[var\(--color-electric-purple\)\]:hover{color:var(--color-electric-purple)}.hover\:text-white:hover{color:var(--color-white)}}.active\:scale-75:active{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-y)}@media(min-width:40rem){.sm\:right-3{right:calc(var(--spacing)*3)}.sm\:mt-8{margin-top:calc(var(--spacing)*8)}.sm\:mb-4{margin-bottom:calc(var(--spacing)*4)}.sm\:mb-6{margin-bottom:calc(var(--spacing)*6)}.sm\:mb-12{margin-bottom:calc(var(--spacing)*12)}.sm\:mb-16{margin-bottom:calc(var(--spacing)*16)}.sm\:h-2{height:calc(var(--spacing)*2)}.sm\:h-5{height:calc(var(--spacing)*5)}.sm\:w-2{width:calc(var(--spacing)*2)}.sm\:w-5{width:calc(var(--spacing)*5)}.sm\:gap-4{gap:calc(var(--spacing)*4)}.sm\:gap-6{gap:calc(var(--spacing)*6)}.sm\:gap-8{gap:calc(var(--spacing)*8)}.sm\:rounded-2xl{border-radius:var(--radius-2xl)}.sm\:rounded-3xl{border-radius:var(--radius-3xl)}.sm\:rounded-xl{border-radius:var(--radius-xl)}.sm\:p-2{padding:calc(var(--spacing)*2)}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:p-8{padding:calc(var(--spacing)*8)}.sm\:px-3{padding-inline:calc(var(--spacing)*3)}.sm\:px-4{padding-inline:calc(var(--spacing)*4)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:px-8{padding-inline:calc(var(--spacing)*8)}.sm\:py-1{padding-block:calc(var(--spacing)*1)}.sm\:py-1\.5{padding-block:calc(var(--spacing)*1.5)}.sm\:py-4{padding-block:calc(var(--spacing)*4)}.sm\:py-12{padding-block:calc(var(--spacing)*12)}.sm\:pr-12{padding-right:calc(var(--spacing)*12)}.sm\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.sm\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.sm\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.sm\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}@media(min-width:48rem){.md\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}}@media(min-width:64rem){.lg\:mb-16{margin-bottom:calc(var(--spacing)*16)}.lg\:mb-24{margin-bottom:calc(var(--spacing)*24)}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:gap-12{gap:calc(var(--spacing)*12)}.lg\:p-10{padding:calc(var(--spacing)*10)}.lg\:px-12{padding-inline:calc(var(--spacing)*12)}.lg\:py-16{padding-block:calc(var(--spacing)*16)}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.lg\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}@media(min-width:80rem){.xl\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}}.font-display{font-family:Clash Display,system-ui,sans-serif}.font-body{font-family:Satoshi,-apple-system,BlinkMacSystemFont,sans-serif}.text-gradient-electric{background:var(--gradient-electric);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text}.text-gradient-ocean{background:var(--gradient-ocean);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text}.bg-mesh{background:var(--gradient-mesh)}.noise-overlay:before{content:"";pointer-events:none;z-index:1;mix-blend-mode:overlay;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 400 400' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.2' numOctaves='5' /%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.15'/%3E%3C/svg%3E");position:absolute;inset:0}.blob{filter:blur(60px);opacity:.3;border-radius:40% 60% 70% 30%/40% 50% 60%;animation:20s ease-in-out infinite morph;position:absolute}@keyframes morph{0%,to{border-radius:40% 60% 70% 30%/40% 50% 60%;transform:translate(0)rotate(0)}25%{border-radius:60% 40% 30% 70%/60% 30% 70% 40%;transform:translate(50px,-50px)rotate(90deg)}50%{border-radius:30% 70% 50% 50%/50% 60% 40%;transform:translate(-30px,30px)rotate(180deg)}75%{border-radius:70% 30% 60% 40%/30% 70% 50% 50%;transform:translate(30px,50px)rotate(270deg)}}@keyframes liquid-float{0%,to{transform:translateY(0)rotate(0)}25%{transform:translateY(-30px)rotate(2deg)}50%{transform:translateY(-15px)rotate(-2deg)}75%{transform:translateY(-40px)rotate(1deg)}}.animate-liquid-float{animation:8s ease-in-out infinite liquid-float}@keyframes fade-scale-in{0%{opacity:0;transform:scale(.9)translateY(20px)}to{opacity:1;transform:scale(1)translateY(0)}}.animate-fade-scale-in{animation:.8s cubic-bezier(.16,1,.3,1) forwards fade-scale-in}@keyframes pulse-glow{0%,to{box-shadow:0 0 20px #a855f766}50%{box-shadow:0 0 40px #a855f7b3}}.animate-pulse-glow{animation:3s ease-in-out infinite pulse-glow}@keyframes rotate-slow{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-rotate-slow{animation:30s linear infinite rotate-slow}.delay-100{animation-delay:.1s}.delay-200{animation-delay:.2s}.delay-300{animation-delay:.3s}.delay-400{animation-delay:.4s}.delay-500{animation-delay:.5s}.delay-600{animation-delay:.6s}.delay-700{animation-delay:.7s}.delay-800{animation-delay:.8s}.delay-1000{animation-delay:1s}.delay-1200{animation-delay:1.2s}.glass-border-glow{border:1px solid #a855f733;position:relative}.glass-border-glow:before{content:"";border-radius:inherit;pointer-events:none;opacity:0;background:linear-gradient(135deg,#a855f766,#0000,#3b82f666);padding:2px;transition:opacity .3s;position:absolute;inset:-2px;-webkit-mask-image:linear-gradient(#fff 0 0),linear-gradient(#fff 0 0);-webkit-mask-position:0 0,0 0;-webkit-mask-size:auto,auto;-webkit-mask-repeat:repeat,repeat;-webkit-mask-clip:content-box,border-box;-webkit-mask-origin:content-box,border-box;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-source-type:auto,auto;mask-mode:match-source,match-source}.glass-border-glow:hover:before{opacity:1}.hover-lift{transition:transform .3s cubic-bezier(.16,1,.3,1),box-shadow .3s}.hover-lift:hover{transform:translateY(-8px)rotate(-1deg);box-shadow:0 20px 60px #a855f74d}.shimmer-text{background-size:200%;background:linear-gradient(90deg,#f5f5f5 25%,var(--color-electric-purple)50%,#f5f5f5 75%);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;animation:3s linear infinite shimmer-slide}@keyframes shimmer-slide{to{background-position:200%}}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes pulse{50%{opacity:.5}}@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@creativoma/liquid-glass",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
4
4
  "type": "module",
5
5
  "description": "A React wrapper component with liquid frosted glass effect using TailwindCSS",
6
- "main": "dist/index.js",
7
- "module": "dist/index.esm.js",
8
- "types": "dist/index.d.ts",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.esm.js",
8
+ "types": "./dist/index.d.ts",
9
9
  "homepage": "https://github.com/creativoma/liquid-glass#readme",
10
10
  "repository": {
11
11
  "type": "git",
@@ -13,9 +13,9 @@
13
13
  },
14
14
  "exports": {
15
15
  ".": {
16
+ "types": "./dist/index.d.ts",
16
17
  "import": "./dist/index.esm.js",
17
- "require": "./dist/index.js",
18
- "types": "./dist/index.d.ts"
18
+ "require": "./dist/index.js"
19
19
  }
20
20
  },
21
21
  "files": [
@@ -48,26 +48,26 @@
48
48
  "react-dom": ">=18.0.0"
49
49
  },
50
50
  "devDependencies": {
51
- "@eslint/js": "^9.39.1",
52
- "@tailwindcss/postcss": "^4.1.17",
53
- "@types/node": "^20.19.25",
54
- "@types/react": "^19.2.7",
51
+ "@eslint/js": "^9.39.2",
52
+ "@tailwindcss/postcss": "^4.1.18",
53
+ "@types/node": "^25.2.3",
54
+ "@types/react": "^19.2.14",
55
55
  "@types/react-dom": "^19.2.3",
56
- "@vitejs/plugin-react": "^4.7.0",
57
- "autoprefixer": "^10.4.22",
58
- "eslint": "^9.39.1",
59
- "eslint-plugin-react-hooks": "^5.2.0",
60
- "eslint-plugin-react-refresh": "^0.4.24",
61
- "globals": "^16.5.0",
56
+ "@vitejs/plugin-react": "^5.1.4",
57
+ "autoprefixer": "^10.4.24",
58
+ "eslint": "^9.39.2",
59
+ "eslint-plugin-react-hooks": "^7.0.1",
60
+ "eslint-plugin-react-refresh": "^0.5.0",
61
+ "globals": "^17.3.0",
62
62
  "postcss": "^8.5.6",
63
- "prettier": "^3.7.4",
64
- "prettier-plugin-tailwindcss": "^0.6.14",
65
- "react": "^19.2.1",
66
- "react-dom": "^19.2.1",
67
- "tailwindcss": "^4.1.17",
63
+ "prettier": "^3.8.1",
64
+ "prettier-plugin-tailwindcss": "^0.7.2",
65
+ "react": "^19.2.4",
66
+ "react-dom": "^19.2.4",
67
+ "tailwindcss": "^4.1.18",
68
68
  "typescript": "^5.9.3",
69
- "typescript-eslint": "^8.48.1",
70
- "vite": "^7.2.6",
69
+ "typescript-eslint": "^8.55.0",
70
+ "vite": "^7.3.1",
71
71
  "vite-plugin-dts": "^4.5.4"
72
72
  },
73
73
  "publishConfig": {