react-snackbar-glass 1.3.0 → 1.4.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,28 @@ All notable changes to this project are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.4.0] - 2026-10-28
9
+
10
+ ### Added
11
+
12
+ - Surface presets via `tone`: `paper` (opaque matte, light/dark aware),
13
+ `graphite` (dark charcoal in both themes) and `neon` (near-black with an
14
+ accent glow), next to the existing `glass` and `solid`. Per-snackbar, on the
15
+ provider and in store config; no new prop to learn.
16
+ - Demo: the playground's tone switch is now a five-way surface picker with
17
+ swatches.
18
+
19
+ ### Changed
20
+
21
+ - README is now a full API reference: layouts, surfaces, sizes, animations,
22
+ every `SnackbarOptions` field, close reasons, the store surface and the
23
+ theming tokens.
24
+
25
+ ### Fixed
26
+
27
+ - Title-less cards no longer pin their message to the top edge: content is
28
+ centred against the icon when there is no title.
29
+
8
30
  ## [1.3.0] - 2026-10-28
9
31
 
10
32
  ### Added
@@ -19,8 +41,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
19
41
  (`'slide' | 'fade' | 'scale' | 'pop' | 'flip' | 'none'`).
20
42
  - `--prs-enter-duration` / `--prs-exit-duration` and `--prs-radius-inline`
21
43
  CSS variables for pacing and shaping the new modes.
22
- - Demo: layout and motion selectors in the Studio panel, `toast.single()`
23
- example, and position buttons now confirm with a single-line toast.
44
+ - Demo: replaced the showcase page with an API-first homepage — hero install
45
+ command, 3-step quickstart, live playground, method/option tables and theming
46
+ notes (`demo/src/ApiHome.tsx`).
24
47
 
25
48
  ## [1.2.0] - 2026-10-28
26
49
 
package/README.md CHANGED
@@ -1,15 +1,15 @@
1
1
  # react-snackbar-glass
2
2
 
3
- A glassmorphic snackbar system for React — queueing, promise-aware
4
- states, swipe-to-dismiss and token-driven theming with **zero runtime
3
+ Queueing, promise-aware snackbars for React — five ready-made surfaces, three
4
+ densities, swipe-to-dismiss and token-driven theming with **zero runtime
5
5
  dependencies**.
6
6
 
7
- - 🪟 **Glass or solid** surfaces, `xs` → `lg` sizes, six screen corners
7
+ - 🪟 **Five surfaces** — `glass`, `paper`, `solid`, `graphite`, `neon`
8
+ - 📐 **Three layouts** — `card`, `compact`, `inline`; `toast.single()` for one-liners
8
9
  - 🌍 **Global `toast`** — call it from anywhere, no hook required
9
10
  - ⏳ **Promise aware** — one call moves a snackbar through loading → success → error
10
11
  - 👆 **Swipe to dismiss**, hover/focus/document-hidden pause, countdown hairline
11
- - 📦 **Compact + minimize** — one-line pills, or collapse the whole stack
12
- - ✏️ **Single-line status** — `toast.single()` for instant, title-less feedback
12
+ - 📦 **Compact + minimize** — one-line pills, or collapse the whole stack into one
13
13
  - 🎞️ **Pick your motion** — slide, fade, scale, pop, flip or none
14
14
  - ♿ **Accessible** — polite/assertive live regions, keyboard reachable actions, `prefers-reduced-motion`
15
15
  - 🧩 **Typed** — written in TypeScript, ships ESM + CJS + `.d.ts`
@@ -36,7 +36,7 @@ import 'react-snackbar-glass/styles.css';
36
36
 
37
37
  export default function App() {
38
38
  return (
39
- <SnackbarProvider position="bottom-right" theme="auto">
39
+ <SnackbarProvider position="bottom-right" theme="auto" tone="glass">
40
40
  <Dashboard />
41
41
  </SnackbarProvider>
42
42
  );
@@ -53,25 +53,43 @@ function Dashboard() {
53
53
  }
54
54
  ```
55
55
 
56
+ That is the whole setup: one provider, one stylesheet, one hook. Everything else
57
+ below is optional.
58
+
56
59
  ## API
57
60
 
61
+ Two entry points render the same store, so pick whichever fits the call site:
62
+
63
+ | Import | Use it when |
64
+ | --- | --- |
65
+ | `useSnackbar()` | Inside a component — the idiomatic path. |
66
+ | `toast` | Anywhere else: data layers, API clients, event handlers, `setTimeout`. |
67
+
58
68
  ### `useSnackbar()`
59
69
 
70
+ ```ts
71
+ const snackbar = useSnackbar();
72
+ ```
73
+
60
74
  | Method | Description |
61
75
  | --- | --- |
62
76
  | `show(options)` | Queue a fully customised snackbar, returns its `id`. |
63
- | `update(id, options)` | Patch an existing snackbar in place; timers restart if `duration` changes. |
77
+ | `update(id, options)` | Patch an existing snackbar in place; timers restart when `duration` changes. |
64
78
  | `dismiss(id?, reason?)` | Close one snackbar (or the oldest) and report a close reason. |
65
79
  | `dismissAll(reason?)` | Close every visible snackbar. |
66
80
  | `success / error / warning / info / neutral / loading / custom(message, options?)` | Variant presets. |
67
- | `promise(promise, messages, options?)` | Drive a single snackbar through loading, success and error. |
81
+ | `single(message, options?)` | Message-only status line (`layout: 'inline'`). |
82
+ | `promise(promise, messages, options?)` | Drive one snackbar through loading → success → error. |
83
+ | `minimize()` / `expand()` / `isMinimized()` | Collapse the stack into a summary pill and bring it back. |
68
84
  | `store` | Escape hatch: the underlying store for subscriptions and advanced updates. |
69
85
 
86
+ Every method returns the snackbar `id` (except `update`, `dismiss*` and the
87
+ minimize helpers), so you can update or dismiss it later.
88
+
70
89
  ### `toast` — global API
71
90
 
72
- Import `toast` when you are outside a component: data layers, event
73
- emitters, API clients, `setTimeout` callbacks. It targets the same store
74
- that `<SnackbarProvider>` renders, so no hook is needed.
91
+ Import `toast` when you are outside a component. It talks to the same store that
92
+ `<SnackbarProvider>` renders, so no hook is needed.
75
93
 
76
94
  ```ts
77
95
  import { toast } from 'react-snackbar-glass';
@@ -79,22 +97,115 @@ import { toast } from 'react-snackbar-glass';
79
97
  toast('Draft saved');
80
98
  toast.success('Deployment complete.', { title: 'v1.4.0 is live' });
81
99
  toast.error('Payment declined', { action: { label: 'Retry', onClick: retry } });
82
- ```
83
-
84
- It mirrors `useSnackbar()` one-to-one — `show`, `update`, `dismiss`,
85
- `dismissAll`, every variant preset, `promise`, and `store`:
100
+ toast.single('Position set to top-center');
86
101
 
87
- ```ts
88
102
  const id = toast.loading('Saving…');
89
103
  await save();
90
104
  toast.update(id, { variant: 'success', message: 'Saved', duration: 3000 });
91
105
  ```
92
106
 
107
+ It mirrors `useSnackbar()` one-to-one — `show`, `update`, `dismiss`,
108
+ `dismissAll`, every variant preset, `single`, `promise`, `minimize`, `expand`,
109
+ `isMinimized` and `store`.
110
+
93
111
  `<SnackbarProvider>` renders the shared store by default. Mount
94
112
  `<SnackbarHost store={getDefaultStore()} />` if you need the host without a
95
- provider, and `setDefaultStore(store)` to point `toast` at a store of your
96
- own (handy in tests or multi-app setups). On the server, pass an explicit
97
- `store` so requests stay isolated.
113
+ provider, and `setDefaultStore(store)` to point `toast` at a store of your own
114
+ (handy in tests or multi-app setups). On the server, pass an explicit `store` so
115
+ requests stay isolated.
116
+
117
+ ### Layouts
118
+
119
+ `layout` is the density axis. It can be set per snackbar, on the provider or in
120
+ the store config, and it is the only thing that changes between the three shapes:
121
+
122
+ | `layout` | Shape | Use it for |
123
+ | --- | --- | --- |
124
+ | `card` | Full card: title, message, action, hairline. Default. | Results that deserve a headline and an action. |
125
+ | `compact` | Fully rounded single-line pill. | High-frequency messages that should stay quiet. |
126
+ | `inline` | Message-only status line, content width, ~38 px tall. | Instant feedback such as “Copied” or “Position set”. |
127
+
128
+ ```ts
129
+ toast.success('Draft saved', { layout: 'compact' });
130
+ snackbar.show({ message: 'Synced', layout: 'inline' });
131
+ <SnackbarProvider layout="compact" />;
132
+ ```
133
+
134
+ `compact: true` still works and is sugar for `layout: 'compact'`.
135
+
136
+ **Single-line status** — `toast.single()` is the `inline` preset with a hard
137
+ one-line contract: long text truncates with an ellipsis instead of wrapping, and
138
+ a timed notice has no title, no countdown hairline and no close button.
139
+
140
+ ```ts
141
+ toast.single('Position set to top-center', { variant: 'success' });
142
+ toast.single('Could not reach the server', { variant: 'error', duration: 8000 });
143
+ ```
144
+
145
+ ### Surfaces
146
+
147
+ Five presets ship with the stylesheet. Pick one per snackbar or as the default:
148
+
149
+ ```tsx
150
+ <SnackbarProvider tone="paper" />
151
+
152
+ // or per snackbar
153
+ toast.info('Backup finished.', { tone: 'graphite' });
154
+ ```
155
+
156
+ | `tone` | Look |
157
+ | --- | --- |
158
+ | `glass` | Frosted and translucent — the page shows through. Default. |
159
+ | `paper` | Opaque, matte, hairline border, no blur. Follows light/dark. |
160
+ | `solid` | The variant accent painted as the surface, white text. |
161
+ | `graphite` | Dark matte charcoal with light text, in both themes. |
162
+ | `neon` | Near-black with an accent glow ring, in both themes. |
163
+
164
+ All five keep the same layout, icon tinting, hairline and motion, and every one
165
+ is driven by the `--prs-*` tokens, so you can restyle a preset without forking
166
+ the CSS.
167
+
168
+ ### Sizes and positions
169
+
170
+ | `size` | Width (relative to `--prs-width`, default `384px`) |
171
+ | --- | --- |
172
+ | `xs` | 72 % |
173
+ | `sm` | 86 % |
174
+ | `md` | 100 % — default |
175
+ | `lg` | 116 % |
176
+
177
+ Positions are the six screen corners: `top-left`, `top-center`, `top-right`,
178
+ `bottom-left`, `bottom-center`, `bottom-right` (default).
179
+
180
+ ```ts
181
+ toast.success('Saved', { size: 'sm', position: 'top-center' });
182
+ ```
183
+
184
+ `maxVisible` (default `3`) caps how many cards a corner shows at once; older
185
+ ones stay queued and take the next free slot.
186
+
187
+ ### Animations
188
+
189
+ One preset drives both phases; `enterAnimation` / `exitAnimation` override a
190
+ single phase:
191
+
192
+ ```ts
193
+ toast.success('Saved', { animation: 'fade' });
194
+ toast.error('Failed', { animation: 'scale', exitAnimation: 'none' });
195
+ <SnackbarProvider animation="pop" />;
196
+ ```
197
+
198
+ | Preset | Feel |
199
+ | --- | --- |
200
+ | `slide` | Spring slide from the nearest edge with a soft blur (default). |
201
+ | `fade` | Pure opacity cross-fade. |
202
+ | `scale` | Zoom from the center. |
203
+ | `pop` | Bouncy overshoot. |
204
+ | `flip` | 3D flip on the X axis. |
205
+ | `none` | Instant, no motion. |
206
+
207
+ Pace them with `--prs-enter-duration` / `--prs-exit-duration` (defaults
208
+ `440ms` / `190ms`); `prefers-reduced-motion` still disables everything.
98
209
 
99
210
  ### Promise-aware flows
100
211
 
@@ -112,12 +223,13 @@ snackbar.promise(deploy(), {
112
223
  });
113
224
  ```
114
225
 
115
- `success` and `error` can be plain content, full options, or a mapper that
116
- receives the resolved value / rejection reason.
226
+ `loading`, `success` and `error` accept plain content, full options, or a mapper
227
+ that receives the resolved value / rejection reason. The returned promise
228
+ resolves with the original value, so it can be awaited inline.
117
229
 
118
230
  ### Sticky snackbars with in-place updates
119
231
 
120
- ```tsx
232
+ ```ts
121
233
  const id = snackbar.show({
122
234
  variant: 'loading',
123
235
  title: 'Uploading assets',
@@ -134,9 +246,12 @@ snackbar.update(id, {
134
246
  });
135
247
  ```
136
248
 
249
+ Reusing an `id` (in `show()` or `update()`) updates or revives the existing
250
+ snackbar instead of stacking a duplicate — ideal for progress-style flows.
251
+
137
252
  ### Actions and undo windows
138
253
 
139
- ```tsx
254
+ ```ts
140
255
  snackbar.show({
141
256
  message: 'Project archived.',
142
257
  duration: 7000,
@@ -147,26 +262,76 @@ snackbar.show({
147
262
  });
148
263
  ```
149
264
 
150
- Action handlers may return a promise: the button shows a pending state and
151
- the snackbar only closes after the handler settles (`closeOnClick`, default
152
- `true`).
265
+ Action handlers may return a promise: the button shows a pending state and the
266
+ snackbar only closes after the handler settles (`closeOnClick`, default `true`).
267
+ Set `closeOnClick: false` to keep the snackbar open for a second step.
268
+
269
+ ### Close reasons and lifecycle
270
+
271
+ `onClose` receives **why** a snackbar went away, plus its id:
272
+
273
+ ```ts
274
+ snackbar.show({
275
+ message: 'Draft saved',
276
+ onOpen: (id) => track('shown', id),
277
+ onClose: (reason) => track('closed', reason),
278
+ });
279
+ ```
280
+
281
+ | Reason | Fired by |
282
+ | --- | --- |
283
+ | `timeout` | The duration elapsed. |
284
+ | `manual` | The close button (or `dismiss()` without a reason). |
285
+ | `action` | The action button, after its handler settled. |
286
+ | `swipe` | A drag past `swipeThreshold`. |
287
+ | `escape` | The user pressed <kbd>Esc</kbd> while a snackbar had focus. |
288
+ | `dismissAll` | `dismissAll()` cleared the stack. |
289
+
290
+ `onOpen` runs once the snackbar is actually mounted in a visible slot — not when
291
+ it is queued.
292
+
293
+ ## `SnackbarOptions`
294
+
295
+ | Option | Type | Default | Notes |
296
+ | --- | --- | --- | --- |
297
+ | `id` | `string` | generated | Stable key; reusing it updates instead of stacking. |
298
+ | `title` | `ReactNode` | — | Small, strong headline above the message. |
299
+ | `message` | `ReactNode` | — | Main content. |
300
+ | `variant` | `'neutral' \| 'success' \| 'error' \| 'warning' \| 'info' \| 'loading' \| 'custom'` | `'neutral'` | Drives accent, icon and live-region politeness. |
301
+ | `duration` | `number \| null` | `5000` | `null`, `0` or `Infinity` = persistent. |
302
+ | `position` | `SnackbarPosition` | provider | Corner for this snackbar. |
303
+ | `icon` | `ReactNode \| false` | variant icon | `false` hides the icon. |
304
+ | `action` | `{ label, onClick?, closeOnClick? } \| null` | `null` | One call-to-action. |
305
+ | `dismissible` | `boolean` | `true` | Show the close button. |
306
+ | `progress` | `boolean` | `true` | Countdown hairline. |
307
+ | `layout` | `'card' \| 'compact' \| 'inline'` | `'card'` | Density. |
308
+ | `compact` | `boolean` | `false` | Sugar for `layout: 'compact'`. |
309
+ | `animation` | `SnackbarAnimation` | `'slide'` | Both phases. |
310
+ | `enterAnimation` / `exitAnimation` | `SnackbarAnimation` | — | Per-phase override. |
311
+ | `tone` | `'glass' \| 'paper' \| 'solid' \| 'graphite' \| 'neon'` | `'glass'` | Surface preset. |
312
+ | `size` | `'xs' \| 'sm' \| 'md' \| 'lg'` | `'md'` | Density/width. |
313
+ | `className` / `style` | — | — | Per-snackbar styling hooks. |
314
+ | `onOpen` | `(id) => void` | — | Mounted and visible. |
315
+ | `onClose` | `(reason, id) => void` | — | Dismissal started. |
153
316
 
154
317
  ## `<SnackbarProvider>` props
155
318
 
319
+ Every default below can be overridden per snackbar in `SnackbarOptions`.
320
+
156
321
  | Prop | Type | Default | Description |
157
322
  | --- | --- | --- | --- |
158
323
  | `position` | `SnackbarPosition` | `'bottom-right'` | Default corner for new snackbars. |
159
324
  | `duration` | `number \| null` | `5000` | Auto-dismiss delay in ms. `null`/`0`/`Infinity` = persistent. |
160
- | `tone` | `'glass' \| 'solid'` | `'glass'` | Surface treatment. |
325
+ | `tone` | `'glass' \| 'paper' \| 'solid' \| 'graphite' \| 'neon'` | `'glass'` | Surface preset. |
161
326
  | `size` | `'xs' \| 'sm' \| 'md' \| 'lg'` | `'md'` | Card density/width. |
327
+ | `layout` | `'card' \| 'compact' \| 'inline'` | `'card'` | Default layout. |
328
+ | `compact` | `boolean` | `false` | Sugar for `layout: 'compact'`. |
329
+ | `animation` | `SnackbarAnimation` | `'slide'` | Enter + exit preset. |
330
+ | `enterAnimation` / `exitAnimation` | `SnackbarAnimation` | — | Per-phase override. |
162
331
  | `theme` | `'light' \| 'dark' \| 'auto'` | `'auto'` | Color scheme. |
163
332
  | `maxVisible` | `number` | `3` | Simultaneously visible cards per corner. |
164
333
  | `dismissible` | `boolean` | `true` | Show the close button. |
165
334
  | `progress` | `boolean` | `true` | Show the countdown hairline. |
166
- | `compact` | `boolean` | `false` | Single-line pill for every snackbar. |
167
- | `layout` | `'card' \| 'compact' \| 'inline'` | `'card'` | Default layout; `compact` is sugar for `'compact'`. |
168
- | `animation` | `'slide' \| 'fade' \| 'scale' \| 'pop' \| 'flip' \| 'none'` | `'slide'` | Enter + exit animation preset. |
169
- | `enterAnimation` / `exitAnimation` | same as `animation` | — | Override a single phase. |
170
335
  | `minimizedLabel` | `(count: number) => ReactNode` | `"3 notifications"` | Text on the collapsed pill. |
171
336
  | `pauseOnHover` | `boolean` | `true` | Freeze the timer while hovered. |
172
337
  | `pauseOnFocus` | `boolean` | `true` | Freeze the timer while focus is inside. |
@@ -179,58 +344,7 @@ the snackbar only closes after the handler settles (`closeOnClick`, default
179
344
  | `container` | `HTMLElement \| () => HTMLElement \| null` | `document.body` | Portal target. |
180
345
  | `dir` | `'ltr' \| 'rtl'` | inherited | Text direction. |
181
346
  | `zIndex` | `number` | `2147483000` | Host stacking context. |
182
-
183
- ## `SnackbarOptions`
184
-
185
- `id`, `title`, `message`, `variant`, `duration`, `position`, `icon`,
186
- `action`, `dismissible`, `progress`, `compact`, `layout`, `animation`,
187
- `enterAnimation`, `exitAnimation`, `tone`, `size`, `className`, `style`,
188
- `onOpen`, `onClose`.
189
-
190
- Reusing an `id` updates (or revives) the existing snackbar instead of stacking
191
- a duplicate — ideal for progress-style flows.
192
-
193
- ## Single-line status notices
194
-
195
- `toast.single()` is the "one line, no ceremony" preset: content width, a hard
196
- one-line contract (long text truncates with an ellipsis instead of wrapping),
197
- no title, no countdown hairline and no close button while it is timed.
198
-
199
- ```ts
200
- toast.single('Position set to top-center', { variant: 'success' });
201
- toast.single('Could not reach the server', { variant: 'error', duration: 8000 });
202
- ```
203
-
204
- It is `layout: 'inline'` under the hood, so every entry point can do the same:
205
-
206
- ```ts
207
- snackbar.show({ message: 'Synced', layout: 'inline' });
208
- useSnackbar().single('Copied to clipboard');
209
- <SnackbarProvider layout="inline" />;
210
- ```
211
-
212
- ## Animations
213
-
214
- One preset drives both phases; `enterAnimation` / `exitAnimation` override a
215
- single phase:
216
-
217
- ```ts
218
- toast.success('Saved', { animation: 'fade' });
219
- toast.error('Failed', { animation: 'scale', exitAnimation: 'none' });
220
- <SnackbarProvider animation="pop" />;
221
- ```
222
-
223
- | Preset | Feel |
224
- | --- | --- |
225
- | `slide` | Spring slide from the nearest edge with a soft blur (default). |
226
- | `fade` | Pure opacity cross-fade. |
227
- | `scale` | Zoom from the center. |
228
- | `pop` | Bouncy overshoot. |
229
- | `flip` | 3D flip on the X axis. |
230
- | `none` | Instant, no motion. |
231
-
232
- Pace them with `--prs-enter-duration` / `--prs-exit-duration` (defaults
233
- `440ms` / `190ms`); `prefers-reduced-motion` still disables everything.
347
+ | `className` / `style` | — | — | Classes/styles for the host root. |
234
348
 
235
349
  ## Compact and minimized stacks
236
350
 
@@ -250,9 +364,9 @@ Set it once for every snackbar with `<SnackbarProvider compact />` or
250
364
  (`"3 notifications"`) that expands on click:
251
365
 
252
366
  ```ts
253
- toast.minimize(); // stack → one pill
254
- toast.expand(); // back to full cards
255
- toast.isMinimized(); // boolean
367
+ toast.minimize(); // stack → one pill
368
+ toast.expand(); // back to full cards
369
+ toast.isMinimized(); // boolean
256
370
  ```
257
371
 
258
372
  `useSnackbar()` exposes the same three methods, and the store has
@@ -261,13 +375,14 @@ toast.isMinimized(); // boolean
261
375
 
262
376
  ## Theming
263
377
 
264
- Colors, radii, blur and motion are CSS custom properties on `.prs-root`
265
- (and per-card inline styles). Override globally:
378
+ Colors, radii, blur and motion are CSS custom properties on `.prs-root` (and
379
+ per-card inline styles).
266
380
 
267
381
  ```css
268
382
  :root {
269
383
  --prs-accent: #8b5cf6;
270
384
  --prs-radius: 16px;
385
+ --prs-width: 400px;
271
386
  }
272
387
  ```
273
388
 
@@ -279,12 +394,32 @@ snackbar.custom('Added to collection.', {
279
394
  });
280
395
  ```
281
396
 
397
+ | Token | Default | Controls |
398
+ | --- | --- | --- |
399
+ | `--prs-accent` | variant color | Accent for icons, actions and links. |
400
+ | `--prs-accent-soft` | 13 % accent | Icon chip / action background. |
401
+ | `--prs-accent-ring` | 30 % accent | Icon ring and hover border. |
402
+ | `--prs-solid` | accent | Surface color of the `solid` tone. |
403
+ | `--prs-radius` | `18px` | Card radius. |
404
+ | `--prs-width` | `384px` | Base card width; `size` scales it. |
405
+ | `--prs-offset` | `20px` | Distance from the viewport edge. |
406
+ | `--prs-gap` | `12px` | Space between stacked cards. |
407
+ | `--prs-font` | Inter/system stack | Font family. |
408
+ | `--prs-blur` | `blur(22px) saturate(1.55)` | Glass backdrop filter. |
409
+ | `--prs-shadow` / `--prs-shadow-hover` | layered | Card shadow. |
410
+ | `--prs-enter-duration` / `--prs-exit-duration` | `440ms` / `190ms` | Motion pacing. |
411
+ | `--prs-radius-inline` | pill radius | Radius of `inline` notices. |
412
+ | `--prs-z-index` | `2147483000` | Host stacking context. |
413
+
282
414
  ## Store-only usage
283
415
 
416
+ If you want to own the store — or render the host somewhere specific — skip the
417
+ provider:
418
+
284
419
  ```tsx
285
420
  import { createSnackbarStore, SnackbarHost } from 'react-snackbar-glass';
286
421
 
287
- const store = createSnackbarStore({ position: 'top-center' });
422
+ const store = createSnackbarStore({ position: 'top-center', tone: 'paper' });
288
423
 
289
424
  function App() {
290
425
  return (
@@ -296,11 +431,27 @@ function App() {
296
431
  }
297
432
  ```
298
433
 
434
+ ```ts
435
+ store.setConfig({ duration: 3000, layout: 'compact' }); // live default changes
436
+ const stop = store.subscribe(() => console.log(store.getSnapshot()));
437
+ ```
438
+
439
+ | Member | Description |
440
+ | --- | --- |
441
+ | `show / update / dismiss / dismissAll / promise` | Same semantics as the hook. |
442
+ | `subscribe(fn)` | Listen for any change; returns an unsubscribe function. |
443
+ | `getSnapshot()` / `getServerSnapshot()` | Current records (stable for `useSyncExternalStore`). |
444
+ | `getConfig()` / `setConfig(partial)` | Read or change defaults at runtime. |
445
+ | `pause(id, reason?)` / `resume(id, reason?)` | Reference-counted timer pause (hover, drag, hidden tab). |
446
+ | `minimize / expand / getMinimized` | Stack collapse state. |
447
+ | `notifyShown(id)` / `notifyExited(id)` | Lifecycle hooks the viewport calls. |
448
+ | `setPageHidden(hidden)` | Forward `document.visibilityState` changes. |
449
+
299
450
  ## Server-side rendering
300
451
 
301
452
  `SnackbarProvider` and `SnackbarHost` render nothing until mounted, and the
302
- store returns a stable server snapshot. No `window` access during render, so
303
- the components are safe in Next.js, Remix and other SSR frameworks.
453
+ store returns a stable server snapshot. No `window` access during render, so the
454
+ components are safe in Next.js, Remix and other SSR frameworks.
304
455
 
305
456
  ## Requirements
306
457
 
package/dist/index.css CHANGED
@@ -334,6 +334,10 @@
334
334
  min-width: 0;
335
335
  padding-top: 1px;
336
336
  }
337
+ .prs-item[data-layout=card] .prs-item__content[data-has-title=false] {
338
+ align-self: center;
339
+ padding-top: 0;
340
+ }
337
341
  .prs-item__title {
338
342
  color: var(--prs-fg);
339
343
  font-size: var(--prs-title-size);
@@ -541,6 +545,102 @@
541
545
  .prs-item[data-tone=solid] .prs-item__message a {
542
546
  color: #fff;
543
547
  }
548
+ .prs-item[data-tone=paper] .prs-item__surface {
549
+ --prs-blur: none;
550
+ --prs-inner: rgba(255, 255, 255, 0.9);
551
+ border-color: rgba(15, 23, 42, 0.09);
552
+ background: #ffffff;
553
+ box-shadow:
554
+ inset 0 1px 0 var(--prs-inner),
555
+ 0 1px 2px rgba(15, 23, 42, 0.06),
556
+ 0 14px 28px -22px rgba(15, 23, 42, 0.45);
557
+ }
558
+ @supports (color: light-dark(#000, #fff)) {
559
+ .prs-item[data-tone=paper] .prs-item__surface {
560
+ --prs-inner: light-dark( rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.05) );
561
+ border-color: light-dark(rgba(15, 23, 42, 0.09), rgba(255, 255, 255, 0.09));
562
+ background: light-dark(#ffffff, #191b23);
563
+ box-shadow:
564
+ inset 0 1px 0 var(--prs-inner),
565
+ 0 1px 2px light-dark(rgba(15, 23, 42, 0.05), rgba(0, 0, 0, 0.5)),
566
+ 0 14px 28px -22px light-dark(rgba(15, 23, 42, 0.4), rgba(0, 0, 0, 0.8));
567
+ }
568
+ }
569
+ .prs-item[data-tone=paper] .prs-item__surface::before {
570
+ opacity: 0.015;
571
+ }
572
+ .prs-item[data-tone=graphite] {
573
+ --prs-accent: var(--prs-accent-dark);
574
+ }
575
+ .prs-item[data-tone=graphite] .prs-item__surface {
576
+ --prs-fg: #f3f5fa;
577
+ --prs-muted: rgba(243, 245, 250, 0.74);
578
+ --prs-track: rgba(255, 255, 255, 0.12);
579
+ --prs-inner: rgba(255, 255, 255, 0.07);
580
+ --prs-blur: none;
581
+ border-color: rgba(255, 255, 255, 0.11);
582
+ background: #1f232c;
583
+ background:
584
+ radial-gradient(
585
+ 120% 150% at 0% 0%,
586
+ rgba(255, 255, 255, 0.06),
587
+ transparent 55%),
588
+ linear-gradient(
589
+ 180deg,
590
+ #2b303b,
591
+ #1b1f27);
592
+ box-shadow:
593
+ inset 0 1px 0 var(--prs-inner),
594
+ 0 1px 2px rgba(0, 0, 0, 0.45),
595
+ 0 18px 40px -26px rgba(0, 0, 0, 0.85);
596
+ }
597
+ .prs-item[data-tone=neon] {
598
+ --prs-accent: var(--prs-accent-dark);
599
+ }
600
+ .prs-item[data-tone=neon] .prs-item__surface {
601
+ --prs-fg: #f8fafc;
602
+ --prs-muted: rgba(248, 250, 252, 0.7);
603
+ --prs-track: rgba(255, 255, 255, 0.14);
604
+ --prs-inner: rgba(255, 255, 255, 0.05);
605
+ --prs-blur: none;
606
+ border-color: rgba(255, 255, 255, 0.14);
607
+ background: #080a11;
608
+ box-shadow:
609
+ inset 0 1px 0 var(--prs-inner),
610
+ 0 18px 40px -28px rgba(0, 0, 0, 0.9),
611
+ 0 0 30px -14px var(--prs-accent);
612
+ }
613
+ @supports (color: color-mix(in srgb, red, blue)) {
614
+ .prs-item[data-tone=neon] .prs-item__surface {
615
+ border-color: color-mix(in srgb, var(--prs-accent) 55%, transparent);
616
+ background:
617
+ radial-gradient(
618
+ 120% 160% at 0% 0%,
619
+ color-mix(in srgb, var(--prs-accent) 26%, transparent),
620
+ transparent 58%),
621
+ radial-gradient(
622
+ 120% 160% at 100% 100%,
623
+ color-mix(in srgb, var(--prs-accent) 12%, transparent),
624
+ transparent 62%),
625
+ #080a11;
626
+ box-shadow:
627
+ inset 0 1px 0 var(--prs-inner),
628
+ 0 0 0 1px color-mix(in srgb, var(--prs-accent) 22%, transparent),
629
+ 0 18px 40px -28px color-mix(in srgb, var(--prs-accent) 45%, transparent),
630
+ 0 0 32px -12px color-mix(in srgb, var(--prs-accent) 70%, transparent);
631
+ }
632
+ }
633
+ .prs-item[data-tone=graphite] .prs-item__surface::before,
634
+ .prs-item[data-tone=neon] .prs-item__surface::before {
635
+ opacity: 0.07;
636
+ }
637
+ @supports (color: color-mix(in srgb, red, blue)) {
638
+ .prs-item[data-tone=graphite],
639
+ .prs-item[data-tone=neon] {
640
+ --prs-accent-soft: color-mix(in srgb, var(--prs-accent) 26%, transparent);
641
+ --prs-accent-ring: color-mix(in srgb, var(--prs-accent) 42%, transparent);
642
+ }
643
+ }
544
644
  @keyframes prs-in {
545
645
  0% {
546
646
  opacity: 0;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/styles.css"],"sourcesContent":["/* react-snackbar-glass — design tokens + component styles */\n.prs-root {\n --prs-font:\n \"Inter var\", Inter, ui-sans-serif, system-ui, -apple-system, \"Segoe UI\",\n Roboto, \"Helvetica Neue\", Arial, sans-serif;\n --prs-radius: 18px;\n --prs-width: 384px;\n --prs-offset: 20px;\n --prs-gap: 12px;\n --prs-z-index: 2147483000;\n\n --prs-surface: rgba(255, 255, 255, 0.9);\n --prs-fg: #0f172a;\n --prs-muted: #5b6472;\n --prs-border: rgba(15, 23, 42, 0.1);\n --prs-border-strong: rgba(15, 23, 42, 0.18);\n --prs-shadow-color: rgba(15, 23, 42, 0.3);\n --prs-inner: rgba(255, 255, 255, 0.7);\n --prs-icon-sheen: rgba(255, 255, 255, 0.6);\n --prs-track: rgba(15, 23, 42, 0.07);\n --prs-blur: blur(22px) saturate(1.55);\n\n --prs-shadow:\n 0 1px 2px -1px var(--prs-shadow-color),\n 0 10px 22px -14px var(--prs-shadow-color),\n 0 24px 56px -28px var(--prs-shadow-color);\n --prs-shadow-hover:\n 0 1px 2px -1px var(--prs-shadow-color),\n 0 14px 28px -14px var(--prs-shadow-color),\n 0 34px 70px -30px var(--prs-shadow-color);\n --prs-ease-spring: cubic-bezier(0.2, 1.12, 0.3, 1);\n --prs-ease-out: cubic-bezier(0.22, 1, 0.36, 1);\n\n position: fixed;\n inset: 0;\n z-index: var(--prs-z-index);\n pointer-events: none;\n font-family: var(--prs-font);\n color-scheme: light;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizeLegibility;\n}\n\n.prs-root[data-prs-theme=\"dark\"] {\n color-scheme: dark;\n}\n\n.prs-root[data-prs-theme=\"auto\"] {\n color-scheme: light dark;\n}\n\n@supports (color: light-dark(#000, #fff)) {\n .prs-root {\n --prs-surface: light-dark(rgba(255, 255, 255, 0.9), rgba(22, 24, 32, 0.82));\n --prs-fg: light-dark(#0f172a, #f4f6fb);\n --prs-muted: light-dark(#5b6472, #a7aebc);\n --prs-border: light-dark(rgba(15, 23, 42, 0.1), rgba(255, 255, 255, 0.1));\n --prs-border-strong: light-dark(\n rgba(15, 23, 42, 0.18),\n rgba(255, 255, 255, 0.18)\n );\n --prs-shadow-color: light-dark(\n rgba(15, 23, 42, 0.3),\n rgba(0, 0, 0, 0.66)\n );\n --prs-inner: light-dark(\n rgba(255, 255, 255, 0.7),\n rgba(255, 255, 255, 0.055)\n );\n --prs-icon-sheen: light-dark(\n rgba(255, 255, 255, 0.6),\n rgba(255, 255, 255, 0.07)\n );\n --prs-track: light-dark(\n rgba(15, 23, 42, 0.07),\n rgba(255, 255, 255, 0.1)\n );\n }\n}\n\n/* ---------------------------------------------------------------- regions */\n\n.prs-region {\n position: absolute;\n display: flex;\n flex-direction: column;\n gap: var(--prs-gap);\n box-sizing: border-box;\n width: min(calc(var(--prs-width) * 1.16 + var(--prs-offset) * 2), 100%);\n padding: var(--prs-offset);\n pointer-events: none;\n}\n\n.prs-region[data-position^=\"top\"] {\n top: 0;\n padding-top: calc(var(--prs-offset) + env(safe-area-inset-top, 0px));\n --prs-enter-y: -14px;\n}\n\n.prs-region[data-position^=\"bottom\"] {\n bottom: 0;\n padding-bottom: calc(var(--prs-offset) + env(safe-area-inset-bottom, 0px));\n --prs-enter-y: 14px;\n}\n\n.prs-region[data-position$=\"left\"] {\n left: 0;\n align-items: flex-start;\n}\n\n.prs-region[data-position$=\"right\"] {\n right: 0;\n align-items: flex-end;\n}\n\n.prs-region[data-position$=\"center\"] {\n left: 50%;\n transform: translateX(-50%);\n align-items: center;\n}\n\n/* ------------------------------------------------------------------ item */\n\n.prs-item {\n --prs-item-width: var(--prs-width);\n --prs-pad-top: 14px;\n --prs-pad-right: 12px;\n --prs-pad-bottom: 15px;\n --prs-pad-left: 14px;\n --prs-col-gap: 12px;\n --prs-icon-size: 34px;\n --prs-icon-radius: 11px;\n --prs-glyph-size: 18px;\n --prs-title-size: 13.5px;\n --prs-message-size: 13px;\n --prs-lead-size: 13.5px;\n --prs-action-size: 12px;\n --prs-action-pad-y: 5px;\n --prs-action-pad-x: 11px;\n --prs-close-size: 26px;\n --prs-close-icon: 14px;\n\n position: relative;\n width: var(--prs-item-width);\n max-width: 100%;\n pointer-events: auto;\n transform-origin: bottom center;\n animation: prs-in var(--prs-enter-duration, 440ms) var(--prs-ease-spring) both;\n will-change: transform, opacity;\n}\n\n.prs-item[data-size=\"xs\"] {\n --prs-item-width: calc(var(--prs-width) * 0.72);\n --prs-radius: 14px;\n --prs-pad-top: 10px;\n --prs-pad-right: 9px;\n --prs-pad-bottom: 12px;\n --prs-pad-left: 10px;\n --prs-col-gap: 9px;\n --prs-icon-size: 28px;\n --prs-icon-radius: 9px;\n --prs-glyph-size: 16px;\n --prs-title-size: 12.5px;\n --prs-message-size: 11.5px;\n --prs-lead-size: 12px;\n --prs-action-size: 10.5px;\n --prs-action-pad-y: 4px;\n --prs-action-pad-x: 8px;\n --prs-close-size: 22px;\n --prs-close-icon: 12px;\n}\n\n.prs-item[data-size=\"sm\"] {\n --prs-item-width: calc(var(--prs-width) * 0.86);\n --prs-radius: 16px;\n --prs-pad-top: 12px;\n --prs-pad-right: 10px;\n --prs-pad-bottom: 13px;\n --prs-pad-left: 12px;\n --prs-col-gap: 10px;\n --prs-icon-size: 31px;\n --prs-icon-radius: 10px;\n --prs-glyph-size: 17px;\n --prs-title-size: 13px;\n --prs-message-size: 12px;\n --prs-lead-size: 12.5px;\n --prs-action-size: 11px;\n --prs-action-pad-y: 4px;\n --prs-action-pad-x: 9px;\n --prs-close-size: 24px;\n --prs-close-icon: 13px;\n}\n\n.prs-item[data-size=\"lg\"] {\n --prs-item-width: calc(var(--prs-width) * 1.16);\n --prs-radius: 20px;\n --prs-pad-top: 16px;\n --prs-pad-right: 14px;\n --prs-pad-bottom: 17px;\n --prs-pad-left: 16px;\n --prs-col-gap: 13px;\n --prs-icon-size: 38px;\n --prs-icon-radius: 12px;\n --prs-glyph-size: 20px;\n --prs-title-size: 14.5px;\n --prs-message-size: 13.5px;\n --prs-lead-size: 14px;\n --prs-action-size: 12.5px;\n --prs-action-pad-y: 6px;\n --prs-action-pad-x: 12px;\n --prs-close-size: 28px;\n --prs-close-icon: 15px;\n}\n\n.prs-item[data-position^=\"top\"] {\n transform-origin: top center;\n}\n\n.prs-item[data-state=\"exiting\"] {\n pointer-events: none;\n animation: prs-out var(--prs-exit-duration, 190ms)\n cubic-bezier(0.4, 0, 1, 1) both;\n}\n\n.prs-item[data-dragging=\"true\"] {\n user-select: none;\n -webkit-user-select: none;\n}\n\n.prs-item__surface {\n position: relative;\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: start;\n column-gap: var(--prs-col-gap);\n box-sizing: border-box;\n width: 100%;\n padding: var(--prs-pad-top) var(--prs-pad-right) var(--prs-pad-bottom)\n var(--prs-pad-left);\n overflow: hidden;\n isolation: isolate;\n border: 1px solid var(--prs-border);\n border-radius: var(--prs-radius);\n background:\n radial-gradient(\n 130% 160% at 0% 0%,\n var(--prs-accent-soft, transparent),\n transparent 54%\n ),\n linear-gradient(180deg, var(--prs-inner), transparent 44%),\n var(--prs-surface);\n box-shadow: var(--prs-shadow), inset 0 1px 0 var(--prs-inner);\n color: var(--prs-fg);\n -webkit-backdrop-filter: var(--prs-blur);\n backdrop-filter: var(--prs-blur);\n transform: translate3d(var(--prs-drag-x, 0), 0, 0);\n opacity: var(--prs-drag-opacity, 1);\n transition:\n transform 260ms var(--prs-ease-out),\n opacity 160ms ease,\n border-color 180ms ease,\n box-shadow 180ms ease;\n touch-action: pan-y;\n}\n\n/* Fine film grain keeps large glass surfaces from feeling flat. */\n.prs-item__surface::before {\n content: \"\";\n position: absolute;\n inset: 0;\n z-index: 0;\n border-radius: inherit;\n pointer-events: none;\n opacity: 0.045;\n mix-blend-mode: soft-light;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.82' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.55'/%3E%3C/svg%3E\");\n}\n\n.prs-item[data-dragging=\"true\"] .prs-item__surface {\n transition: none;\n}\n\n@media (hover: hover) and (pointer: fine) {\n .prs-item__surface:hover {\n border-color: var(--prs-accent-ring, var(--prs-border-strong));\n box-shadow: var(--prs-shadow-hover), inset 0 1px 0 var(--prs-inner);\n }\n}\n\n.prs-item[data-has-icon=\"false\"] .prs-item__surface {\n grid-template-columns: minmax(0, 1fr) auto;\n}\n\n.prs-item[data-dismissible=\"false\"][data-has-icon=\"true\"] .prs-item__surface {\n grid-template-columns: auto minmax(0, 1fr);\n}\n\n.prs-item[data-dismissible=\"false\"][data-has-icon=\"false\"] .prs-item__surface {\n grid-template-columns: minmax(0, 1fr);\n}\n\n/* -------------------------------------------------------------- accent map */\n\n.prs-item {\n --prs-accent-light: #475569;\n --prs-accent-dark: #cbd5e1;\n --prs-accent: var(--prs-accent-light);\n --prs-solid: var(--prs-accent-light);\n --prs-accent-soft: rgba(71, 85, 105, 0.12);\n --prs-accent-ring: rgba(71, 85, 105, 0.28);\n}\n\n@supports (color: light-dark(#000, #fff)) {\n .prs-item {\n --prs-accent: light-dark(var(--prs-accent-light), var(--prs-accent-dark));\n }\n}\n\n@supports (color: color-mix(in srgb, red, blue)) {\n .prs-item {\n --prs-accent-soft: color-mix(\n in srgb,\n var(--prs-accent) 13%,\n transparent\n );\n --prs-accent-ring: color-mix(\n in srgb,\n var(--prs-accent) 30%,\n transparent\n );\n }\n}\n\n.prs-item[data-variant=\"success\"] {\n --prs-accent-light: #087a55;\n --prs-accent-dark: #34d399;\n}\n\n.prs-item[data-variant=\"error\"] {\n --prs-accent-light: #b42318;\n --prs-accent-dark: #f87171;\n}\n\n.prs-item[data-variant=\"warning\"] {\n --prs-accent-light: #9a4e00;\n --prs-accent-dark: #fbbf24;\n}\n\n.prs-item[data-variant=\"info\"] {\n --prs-accent-light: #1d4ed8;\n --prs-accent-dark: #60a5fa;\n}\n\n.prs-item[data-variant=\"loading\"],\n.prs-item[data-variant=\"custom\"] {\n --prs-accent-light: #6d28d9;\n --prs-accent-dark: #a78bfa;\n}\n\n/* ------------------------------------------------------------------ icon */\n\n.prs-item__icon {\n position: relative;\n z-index: 1;\n display: grid;\n place-items: center;\n width: var(--prs-icon-size);\n height: var(--prs-icon-size);\n margin-top: -1px;\n border-radius: var(--prs-icon-radius);\n color: var(--prs-accent);\n background:\n linear-gradient(180deg, var(--prs-icon-sheen), transparent 70%),\n var(--prs-accent-soft);\n box-shadow:\n inset 0 0 0 1px var(--prs-accent-ring),\n inset 0 1px 0 var(--prs-icon-sheen);\n animation: prs-icon-in 540ms var(--prs-ease-spring) both 30ms;\n}\n\n.prs-item__icon svg {\n display: block;\n width: var(--prs-glyph-size);\n height: var(--prs-glyph-size);\n}\n\n.prs-icon-spin {\n animation: prs-spin 900ms linear infinite;\n transform-origin: center;\n}\n\n/* --------------------------------------------------------------- content */\n\n.prs-item__content {\n position: relative;\n z-index: 1;\n min-width: 0;\n padding-top: 1px;\n}\n\n.prs-item__title {\n color: var(--prs-fg);\n font-size: var(--prs-title-size);\n font-weight: 650;\n line-height: 1.35;\n letter-spacing: -0.012em;\n overflow-wrap: anywhere;\n}\n\n.prs-item__message {\n color: var(--prs-muted);\n font-size: var(--prs-message-size);\n font-weight: 400;\n line-height: 1.5;\n letter-spacing: -0.004em;\n overflow-wrap: anywhere;\n}\n\n.prs-item__title + .prs-item__message {\n margin-top: 2px;\n}\n\n.prs-item__content[data-has-title=\"false\"] .prs-item__message {\n color: var(--prs-fg);\n font-size: var(--prs-lead-size);\n font-weight: 500;\n letter-spacing: -0.006em;\n}\n\n.prs-item__message a {\n color: var(--prs-accent);\n text-decoration: underline;\n text-decoration-thickness: 1px;\n text-underline-offset: 2px;\n}\n\n.prs-item__actions {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 9px;\n}\n\n.prs-action {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n appearance: none;\n margin: 0;\n padding: var(--prs-action-pad-y) var(--prs-action-pad-x);\n border: 1px solid var(--prs-accent-ring);\n border-radius: 999px;\n background: var(--prs-accent-soft);\n color: var(--prs-accent);\n font-family: inherit;\n font-size: var(--prs-action-size);\n font-weight: 650;\n line-height: 1.35;\n letter-spacing: 0.004em;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n transition:\n background 160ms ease,\n border-color 160ms ease,\n color 160ms ease,\n transform 160ms ease;\n}\n\n.prs-action:hover {\n background: var(--prs-accent-ring);\n}\n\n.prs-action:active {\n transform: scale(0.965);\n}\n\n.prs-action:disabled {\n cursor: progress;\n opacity: 0.72;\n}\n\n.prs-action:focus-visible {\n outline: 2px solid var(--prs-accent);\n outline-offset: 2px;\n}\n\n.prs-action__spinner {\n width: 11px;\n height: 11px;\n border: 1.5px solid var(--prs-accent-ring);\n border-top-color: var(--prs-accent);\n border-radius: 999px;\n animation: prs-spin 700ms linear infinite;\n}\n\n/* ----------------------------------------------------------------- close */\n\n.prs-close {\n position: relative;\n z-index: 1;\n display: grid;\n place-items: center;\n width: var(--prs-close-size);\n height: var(--prs-close-size);\n margin: -3px -3px 0 0;\n padding: 0;\n border: 0;\n border-radius: 8px;\n background: transparent;\n color: var(--prs-muted);\n line-height: 0;\n cursor: pointer;\n opacity: 0.72;\n -webkit-tap-highlight-color: transparent;\n transition:\n background 150ms ease,\n color 150ms ease,\n opacity 150ms ease;\n}\n\n.prs-close svg {\n width: var(--prs-close-icon);\n height: var(--prs-close-icon);\n pointer-events: none;\n}\n\n.prs-close:hover {\n background: var(--prs-track);\n color: var(--prs-fg);\n opacity: 1;\n}\n\n.prs-close:focus-visible {\n outline: 2px solid var(--prs-accent);\n outline-offset: 1px;\n opacity: 1;\n}\n\n/* -------------------------------------------------------------- progress */\n\n.prs-progress {\n position: absolute;\n right: 12px;\n bottom: 6px;\n left: 12px;\n z-index: 1;\n height: 2px;\n overflow: hidden;\n border-radius: 999px;\n background: var(--prs-track);\n pointer-events: none;\n transition: opacity 140ms ease;\n}\n\n.prs-progress__bar {\n display: block;\n width: 100%;\n height: 100%;\n border-radius: inherit;\n background: linear-gradient(\n 90deg,\n var(--prs-accent),\n color-mix(in srgb, var(--prs-accent) 45%, white)\n );\n transform-origin: left center;\n animation-name: prs-progress;\n animation-timing-function: linear;\n animation-fill-mode: forwards;\n}\n\n.prs-item[data-paused=\"true\"] .prs-progress__bar {\n animation-play-state: paused;\n}\n\n.prs-item[data-state=\"exiting\"] .prs-progress {\n opacity: 0;\n}\n\n[dir=\"rtl\"] .prs-progress__bar {\n transform-origin: right center;\n}\n\n/* ------------------------------------------------------------ solid tone */\n\n.prs-item[data-tone=\"solid\"] .prs-item__surface {\n --prs-fg: #fff;\n --prs-muted: rgba(255, 255, 255, 0.78);\n border-color: color-mix(in srgb, var(--prs-solid) 55%, #000);\n background:\n radial-gradient(\n 140% 200% at 0% 0%,\n rgba(255, 255, 255, 0.2),\n transparent 58%\n ),\n linear-gradient(\n 135deg,\n var(--prs-solid),\n color-mix(in srgb, var(--prs-solid) 72%, #000)\n );\n box-shadow:\n 0 1px 0 rgba(255, 255, 255, 0.24) inset,\n 0 12px 28px -14px color-mix(in srgb, var(--prs-solid) 55%, transparent),\n 0 26px 60px -28px var(--prs-shadow-color);\n}\n\n.prs-item[data-tone=\"solid\"] .prs-item__icon {\n color: #fff;\n background: rgba(255, 255, 255, 0.16);\n box-shadow:\n inset 0 0 0 1px rgba(255, 255, 255, 0.22),\n inset 0 1px 0 rgba(255, 255, 255, 0.26);\n}\n\n.prs-item[data-tone=\"solid\"] .prs-close {\n color: rgba(255, 255, 255, 0.82);\n}\n\n.prs-item[data-tone=\"solid\"] .prs-close:hover {\n background: rgba(255, 255, 255, 0.16);\n color: #fff;\n}\n\n.prs-item[data-tone=\"solid\"] .prs-action {\n border-color: rgba(255, 255, 255, 0.24);\n background: rgba(255, 255, 255, 0.16);\n color: #fff;\n}\n\n.prs-item[data-tone=\"solid\"] .prs-action:hover {\n background: rgba(255, 255, 255, 0.24);\n}\n\n.prs-item[data-tone=\"solid\"] .prs-action:focus-visible {\n outline-color: #fff;\n}\n\n.prs-item[data-tone=\"solid\"] .prs-progress {\n background: rgba(255, 255, 255, 0.18);\n}\n\n.prs-item[data-tone=\"solid\"] .prs-progress__bar {\n background: rgba(255, 255, 255, 0.92);\n}\n\n.prs-item[data-tone=\"solid\"] .prs-item__message a {\n color: #fff;\n}\n\n/* ------------------------------------------------------------- keyframes */\n\n@keyframes prs-in {\n 0% {\n opacity: 0;\n transform: translate3d(0, var(--prs-enter-y, 14px), 0) scale(0.94);\n filter: blur(5px);\n }\n 55% {\n opacity: 1;\n }\n 100% {\n opacity: 1;\n transform: none;\n filter: blur(0);\n }\n}\n\n@keyframes prs-out {\n 0% {\n opacity: 1;\n transform: none;\n filter: blur(0);\n }\n 100% {\n opacity: 0;\n transform: translate3d(0, calc(var(--prs-enter-y, 10px) * 0.55), 0)\n scale(0.965);\n filter: blur(2px);\n }\n}\n\n@keyframes prs-icon-in {\n 0% {\n opacity: 0;\n transform: scale(0.55) rotate(-10deg);\n }\n 100% {\n opacity: 1;\n transform: scale(1) rotate(0deg);\n }\n}\n\n@keyframes prs-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes prs-progress {\n from {\n transform: scaleX(1);\n }\n to {\n transform: scaleX(0);\n }\n}\n\n/* ---------------------------------------------------------- reduced motion */\n\n@media (prefers-reduced-motion: reduce) {\n .prs-item,\n .prs-item[data-state=\"exiting\"] {\n animation-duration: 0.01ms !important;\n }\n\n .prs-item__surface {\n transition-duration: 0.01ms !important;\n }\n\n .prs-item__icon {\n animation: none !important;\n }\n\n .prs-icon-spin {\n animation: none !important;\n opacity: 0.7;\n }\n\n .prs-progress__bar {\n animation: none !important;\n transform: scaleX(1);\n opacity: 0.55;\n }\n}\n\n/* --------------------------------------------------------------- compact */\n/* Single-line pill: same card, far less vertical and horizontal space. */\n.prs-item[data-compact=\"true\"] {\n --prs-item-width: auto;\n max-width: var(--prs-width);\n}\n\n.prs-item[data-compact=\"true\"] .prs-item__surface {\n align-items: center;\n column-gap: 8px;\n padding: 7px 8px 7px 10px;\n border-radius: 999px;\n}\n\n.prs-item[data-compact=\"true\"] .prs-item__icon {\n --prs-icon-size: 20px;\n --prs-glyph-size: 12px;\n --prs-icon-radius: 999px;\n margin-top: 0;\n}\n\n.prs-item[data-compact=\"true\"] .prs-item__content {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n padding-top: 0;\n}\n\n.prs-item[data-compact=\"true\"] .prs-item__title {\n display: none;\n}\n\n.prs-item[data-compact=\"true\"] .prs-item__message,\n.prs-item[data-compact=\"true\"]\n .prs-item__content[data-has-title=\"false\"]\n .prs-item__message {\n max-width: 46ch;\n overflow: hidden;\n font-size: 12.5px;\n font-weight: 500;\n line-height: 1.35;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.prs-item[data-compact=\"true\"] .prs-item__actions {\n flex-shrink: 0;\n margin-top: 0;\n}\n\n.prs-item[data-compact=\"true\"] .prs-action {\n padding: 3px 9px;\n font-size: 11.5px;\n}\n\n.prs-item[data-compact=\"true\"] .prs-close {\n --prs-close-size: 22px;\n --prs-close-icon: 11px;\n margin: 0;\n}\n\n/* ---------------------------------------------------------------- inline */\n/* Message-only status line: content width, one line, no title, no hairline. */\n.prs-item[data-layout=\"inline\"] {\n --prs-item-width: auto;\n max-width: min(420px, 100%);\n}\n\n.prs-item[data-layout=\"inline\"] .prs-item__surface {\n align-items: center;\n column-gap: 9px;\n padding: 8px 13px 8px 9px;\n border-radius: var(--prs-radius-inline, 12px);\n}\n\n.prs-item[data-layout=\"inline\"] .prs-item__icon {\n --prs-icon-size: 22px;\n --prs-glyph-size: 13px;\n --prs-icon-radius: 999px;\n flex: none;\n margin-top: 0;\n}\n\n.prs-item[data-layout=\"inline\"] .prs-item__content {\n min-width: 0;\n padding-top: 0;\n}\n\n.prs-item[data-layout=\"inline\"] .prs-item__title {\n display: none;\n}\n\n.prs-item[data-layout=\"inline\"] .prs-item__message {\n overflow: hidden;\n font-size: 13px;\n font-weight: 500;\n line-height: 1.4;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.prs-item[data-layout=\"inline\"] .prs-item__actions {\n margin-top: 0;\n}\n\n.prs-item[data-layout=\"inline\"] .prs-action {\n padding: 2px 8px;\n font-size: 11.5px;\n}\n\n.prs-item[data-layout=\"inline\"] .prs-close {\n --prs-close-size: 22px;\n --prs-close-icon: 11px;\n margin: 0;\n}\n\n/* -------------------------------------------------------------- minimized */\n/* The whole stack collapses into one summary pill; click to expand. */\n.prs-region--minimized {\n width: auto;\n padding: var(--prs-offset);\n}\n\n.prs-minimized {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n appearance: none;\n margin: 0;\n padding: 8px 15px 8px 12px;\n border: 1px solid var(--prs-border);\n border-radius: 999px;\n background: var(--prs-surface);\n color: var(--prs-fg);\n font-family: inherit;\n font-size: 12.5px;\n font-weight: 560;\n letter-spacing: -0.005em;\n cursor: pointer;\n pointer-events: auto;\n box-shadow: var(--prs-shadow), inset 0 1px 0 var(--prs-inner);\n -webkit-backdrop-filter: var(--prs-blur);\n backdrop-filter: var(--prs-blur);\n animation: prs-minimized-in 220ms var(--prs-ease-out);\n transition:\n border-color 160ms ease,\n box-shadow 160ms ease,\n transform 160ms ease;\n}\n\n.prs-minimized:hover {\n border-color: var(--prs-accent-ring);\n box-shadow: var(--prs-shadow), 0 0 0 3px var(--prs-accent-soft);\n}\n\n.prs-minimized:active {\n transform: scale(0.97);\n}\n\n.prs-minimized:focus-visible {\n outline: 2px solid var(--prs-accent);\n outline-offset: 2px;\n}\n\n.prs-minimized__dot {\n width: 7px;\n height: 7px;\n border-radius: 999px;\n background: var(--prs-accent);\n box-shadow: 0 0 0 3px var(--prs-accent-soft);\n}\n\n@keyframes prs-minimized-in {\n from {\n opacity: 0;\n transform: translate3d(0, 6px, 0) scale(0.96);\n }\n to {\n opacity: 1;\n transform: translate3d(0, 0, 0) scale(1);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .prs-minimized {\n animation: none;\n }\n}\n\n/* ------------------------------------------------------------- animations */\n/*\n * Presets selected with `animation`, `enterAnimation` or `exitAnimation`.\n * Pace them with --prs-enter-duration / --prs-exit-duration.\n */\n\n.prs-item[data-state=\"visible\"][data-enter=\"fade\"] {\n animation: prs-fade-in var(--prs-enter-duration, 260ms) ease both;\n}\n\n.prs-item[data-state=\"exiting\"][data-exit=\"fade\"] {\n animation: prs-fade-out var(--prs-exit-duration, 180ms) ease both;\n}\n\n.prs-item[data-state=\"visible\"][data-enter=\"scale\"] {\n animation: prs-scale-in var(--prs-enter-duration, 300ms) var(--prs-ease-out)\n both;\n}\n\n.prs-item[data-state=\"exiting\"][data-exit=\"scale\"] {\n animation: prs-scale-out var(--prs-exit-duration, 170ms) ease both;\n}\n\n.prs-item[data-state=\"visible\"][data-enter=\"pop\"] {\n animation: prs-pop-in var(--prs-enter-duration, 460ms) var(--prs-ease-spring)\n both;\n}\n\n.prs-item[data-state=\"exiting\"][data-exit=\"pop\"] {\n animation: prs-pop-out var(--prs-exit-duration, 210ms) ease both;\n}\n\n.prs-item[data-state=\"visible\"][data-enter=\"flip\"] {\n animation: prs-flip-in var(--prs-enter-duration, 420ms) var(--prs-ease-out)\n both;\n}\n\n.prs-item[data-state=\"exiting\"][data-exit=\"flip\"] {\n animation: prs-flip-out var(--prs-exit-duration, 220ms) ease both;\n}\n\n.prs-item[data-state=\"visible\"][data-enter=\"none\"] {\n animation: none;\n}\n\n.prs-item[data-state=\"exiting\"][data-exit=\"none\"] {\n animation: none;\n}\n\n.prs-item[data-enter=\"none\"] .prs-item__icon {\n animation: none;\n}\n\n@keyframes prs-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes prs-fade-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n\n@keyframes prs-scale-in {\n from {\n opacity: 0;\n transform: scale(0.86);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n@keyframes prs-scale-out {\n from {\n opacity: 1;\n transform: scale(1);\n }\n to {\n opacity: 0;\n transform: scale(0.9);\n }\n}\n\n@keyframes prs-pop-in {\n 0% {\n opacity: 0;\n transform: scale(0.72);\n }\n 55% {\n opacity: 1;\n transform: scale(1.06);\n }\n 78% {\n transform: scale(0.985);\n }\n 100% {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n@keyframes prs-pop-out {\n 0% {\n opacity: 1;\n transform: scale(1);\n }\n 35% {\n opacity: 1;\n transform: scale(1.04);\n }\n 100% {\n opacity: 0;\n transform: scale(0.85);\n }\n}\n\n@keyframes prs-flip-in {\n from {\n opacity: 0;\n transform: perspective(900px) rotateX(-70deg);\n }\n to {\n opacity: 1;\n transform: perspective(900px) rotateX(0deg);\n }\n}\n\n@keyframes prs-flip-out {\n from {\n opacity: 1;\n transform: perspective(900px) rotateX(0deg);\n }\n to {\n opacity: 0;\n transform: perspective(900px) rotateX(70deg);\n }\n}\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/styles.css"],"sourcesContent":["/* react-snackbar-glass — design tokens + component styles */\n.prs-root {\n --prs-font:\n \"Inter var\", Inter, ui-sans-serif, system-ui, -apple-system, \"Segoe UI\",\n Roboto, \"Helvetica Neue\", Arial, sans-serif;\n --prs-radius: 18px;\n --prs-width: 384px;\n --prs-offset: 20px;\n --prs-gap: 12px;\n --prs-z-index: 2147483000;\n\n --prs-surface: rgba(255, 255, 255, 0.9);\n --prs-fg: #0f172a;\n --prs-muted: #5b6472;\n --prs-border: rgba(15, 23, 42, 0.1);\n --prs-border-strong: rgba(15, 23, 42, 0.18);\n --prs-shadow-color: rgba(15, 23, 42, 0.3);\n --prs-inner: rgba(255, 255, 255, 0.7);\n --prs-icon-sheen: rgba(255, 255, 255, 0.6);\n --prs-track: rgba(15, 23, 42, 0.07);\n --prs-blur: blur(22px) saturate(1.55);\n\n --prs-shadow:\n 0 1px 2px -1px var(--prs-shadow-color),\n 0 10px 22px -14px var(--prs-shadow-color),\n 0 24px 56px -28px var(--prs-shadow-color);\n --prs-shadow-hover:\n 0 1px 2px -1px var(--prs-shadow-color),\n 0 14px 28px -14px var(--prs-shadow-color),\n 0 34px 70px -30px var(--prs-shadow-color);\n --prs-ease-spring: cubic-bezier(0.2, 1.12, 0.3, 1);\n --prs-ease-out: cubic-bezier(0.22, 1, 0.36, 1);\n\n position: fixed;\n inset: 0;\n z-index: var(--prs-z-index);\n pointer-events: none;\n font-family: var(--prs-font);\n color-scheme: light;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizeLegibility;\n}\n\n.prs-root[data-prs-theme=\"dark\"] {\n color-scheme: dark;\n}\n\n.prs-root[data-prs-theme=\"auto\"] {\n color-scheme: light dark;\n}\n\n@supports (color: light-dark(#000, #fff)) {\n .prs-root {\n --prs-surface: light-dark(rgba(255, 255, 255, 0.9), rgba(22, 24, 32, 0.82));\n --prs-fg: light-dark(#0f172a, #f4f6fb);\n --prs-muted: light-dark(#5b6472, #a7aebc);\n --prs-border: light-dark(rgba(15, 23, 42, 0.1), rgba(255, 255, 255, 0.1));\n --prs-border-strong: light-dark(\n rgba(15, 23, 42, 0.18),\n rgba(255, 255, 255, 0.18)\n );\n --prs-shadow-color: light-dark(\n rgba(15, 23, 42, 0.3),\n rgba(0, 0, 0, 0.66)\n );\n --prs-inner: light-dark(\n rgba(255, 255, 255, 0.7),\n rgba(255, 255, 255, 0.055)\n );\n --prs-icon-sheen: light-dark(\n rgba(255, 255, 255, 0.6),\n rgba(255, 255, 255, 0.07)\n );\n --prs-track: light-dark(\n rgba(15, 23, 42, 0.07),\n rgba(255, 255, 255, 0.1)\n );\n }\n}\n\n/* ---------------------------------------------------------------- regions */\n\n.prs-region {\n position: absolute;\n display: flex;\n flex-direction: column;\n gap: var(--prs-gap);\n box-sizing: border-box;\n width: min(calc(var(--prs-width) * 1.16 + var(--prs-offset) * 2), 100%);\n padding: var(--prs-offset);\n pointer-events: none;\n}\n\n.prs-region[data-position^=\"top\"] {\n top: 0;\n padding-top: calc(var(--prs-offset) + env(safe-area-inset-top, 0px));\n --prs-enter-y: -14px;\n}\n\n.prs-region[data-position^=\"bottom\"] {\n bottom: 0;\n padding-bottom: calc(var(--prs-offset) + env(safe-area-inset-bottom, 0px));\n --prs-enter-y: 14px;\n}\n\n.prs-region[data-position$=\"left\"] {\n left: 0;\n align-items: flex-start;\n}\n\n.prs-region[data-position$=\"right\"] {\n right: 0;\n align-items: flex-end;\n}\n\n.prs-region[data-position$=\"center\"] {\n left: 50%;\n transform: translateX(-50%);\n align-items: center;\n}\n\n/* ------------------------------------------------------------------ item */\n\n.prs-item {\n --prs-item-width: var(--prs-width);\n --prs-pad-top: 14px;\n --prs-pad-right: 12px;\n --prs-pad-bottom: 15px;\n --prs-pad-left: 14px;\n --prs-col-gap: 12px;\n --prs-icon-size: 34px;\n --prs-icon-radius: 11px;\n --prs-glyph-size: 18px;\n --prs-title-size: 13.5px;\n --prs-message-size: 13px;\n --prs-lead-size: 13.5px;\n --prs-action-size: 12px;\n --prs-action-pad-y: 5px;\n --prs-action-pad-x: 11px;\n --prs-close-size: 26px;\n --prs-close-icon: 14px;\n\n position: relative;\n width: var(--prs-item-width);\n max-width: 100%;\n pointer-events: auto;\n transform-origin: bottom center;\n animation: prs-in var(--prs-enter-duration, 440ms) var(--prs-ease-spring) both;\n will-change: transform, opacity;\n}\n\n.prs-item[data-size=\"xs\"] {\n --prs-item-width: calc(var(--prs-width) * 0.72);\n --prs-radius: 14px;\n --prs-pad-top: 10px;\n --prs-pad-right: 9px;\n --prs-pad-bottom: 12px;\n --prs-pad-left: 10px;\n --prs-col-gap: 9px;\n --prs-icon-size: 28px;\n --prs-icon-radius: 9px;\n --prs-glyph-size: 16px;\n --prs-title-size: 12.5px;\n --prs-message-size: 11.5px;\n --prs-lead-size: 12px;\n --prs-action-size: 10.5px;\n --prs-action-pad-y: 4px;\n --prs-action-pad-x: 8px;\n --prs-close-size: 22px;\n --prs-close-icon: 12px;\n}\n\n.prs-item[data-size=\"sm\"] {\n --prs-item-width: calc(var(--prs-width) * 0.86);\n --prs-radius: 16px;\n --prs-pad-top: 12px;\n --prs-pad-right: 10px;\n --prs-pad-bottom: 13px;\n --prs-pad-left: 12px;\n --prs-col-gap: 10px;\n --prs-icon-size: 31px;\n --prs-icon-radius: 10px;\n --prs-glyph-size: 17px;\n --prs-title-size: 13px;\n --prs-message-size: 12px;\n --prs-lead-size: 12.5px;\n --prs-action-size: 11px;\n --prs-action-pad-y: 4px;\n --prs-action-pad-x: 9px;\n --prs-close-size: 24px;\n --prs-close-icon: 13px;\n}\n\n.prs-item[data-size=\"lg\"] {\n --prs-item-width: calc(var(--prs-width) * 1.16);\n --prs-radius: 20px;\n --prs-pad-top: 16px;\n --prs-pad-right: 14px;\n --prs-pad-bottom: 17px;\n --prs-pad-left: 16px;\n --prs-col-gap: 13px;\n --prs-icon-size: 38px;\n --prs-icon-radius: 12px;\n --prs-glyph-size: 20px;\n --prs-title-size: 14.5px;\n --prs-message-size: 13.5px;\n --prs-lead-size: 14px;\n --prs-action-size: 12.5px;\n --prs-action-pad-y: 6px;\n --prs-action-pad-x: 12px;\n --prs-close-size: 28px;\n --prs-close-icon: 15px;\n}\n\n.prs-item[data-position^=\"top\"] {\n transform-origin: top center;\n}\n\n.prs-item[data-state=\"exiting\"] {\n pointer-events: none;\n animation: prs-out var(--prs-exit-duration, 190ms)\n cubic-bezier(0.4, 0, 1, 1) both;\n}\n\n.prs-item[data-dragging=\"true\"] {\n user-select: none;\n -webkit-user-select: none;\n}\n\n.prs-item__surface {\n position: relative;\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: start;\n column-gap: var(--prs-col-gap);\n box-sizing: border-box;\n width: 100%;\n padding: var(--prs-pad-top) var(--prs-pad-right) var(--prs-pad-bottom)\n var(--prs-pad-left);\n overflow: hidden;\n isolation: isolate;\n border: 1px solid var(--prs-border);\n border-radius: var(--prs-radius);\n background:\n radial-gradient(\n 130% 160% at 0% 0%,\n var(--prs-accent-soft, transparent),\n transparent 54%\n ),\n linear-gradient(180deg, var(--prs-inner), transparent 44%),\n var(--prs-surface);\n box-shadow: var(--prs-shadow), inset 0 1px 0 var(--prs-inner);\n color: var(--prs-fg);\n -webkit-backdrop-filter: var(--prs-blur);\n backdrop-filter: var(--prs-blur);\n transform: translate3d(var(--prs-drag-x, 0), 0, 0);\n opacity: var(--prs-drag-opacity, 1);\n transition:\n transform 260ms var(--prs-ease-out),\n opacity 160ms ease,\n border-color 180ms ease,\n box-shadow 180ms ease;\n touch-action: pan-y;\n}\n\n/* Fine film grain keeps large glass surfaces from feeling flat. */\n.prs-item__surface::before {\n content: \"\";\n position: absolute;\n inset: 0;\n z-index: 0;\n border-radius: inherit;\n pointer-events: none;\n opacity: 0.045;\n mix-blend-mode: soft-light;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.82' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.55'/%3E%3C/svg%3E\");\n}\n\n.prs-item[data-dragging=\"true\"] .prs-item__surface {\n transition: none;\n}\n\n@media (hover: hover) and (pointer: fine) {\n .prs-item__surface:hover {\n border-color: var(--prs-accent-ring, var(--prs-border-strong));\n box-shadow: var(--prs-shadow-hover), inset 0 1px 0 var(--prs-inner);\n }\n}\n\n.prs-item[data-has-icon=\"false\"] .prs-item__surface {\n grid-template-columns: minmax(0, 1fr) auto;\n}\n\n.prs-item[data-dismissible=\"false\"][data-has-icon=\"true\"] .prs-item__surface {\n grid-template-columns: auto minmax(0, 1fr);\n}\n\n.prs-item[data-dismissible=\"false\"][data-has-icon=\"false\"] .prs-item__surface {\n grid-template-columns: minmax(0, 1fr);\n}\n\n/* -------------------------------------------------------------- accent map */\n\n.prs-item {\n --prs-accent-light: #475569;\n --prs-accent-dark: #cbd5e1;\n --prs-accent: var(--prs-accent-light);\n --prs-solid: var(--prs-accent-light);\n --prs-accent-soft: rgba(71, 85, 105, 0.12);\n --prs-accent-ring: rgba(71, 85, 105, 0.28);\n}\n\n@supports (color: light-dark(#000, #fff)) {\n .prs-item {\n --prs-accent: light-dark(var(--prs-accent-light), var(--prs-accent-dark));\n }\n}\n\n@supports (color: color-mix(in srgb, red, blue)) {\n .prs-item {\n --prs-accent-soft: color-mix(\n in srgb,\n var(--prs-accent) 13%,\n transparent\n );\n --prs-accent-ring: color-mix(\n in srgb,\n var(--prs-accent) 30%,\n transparent\n );\n }\n}\n\n.prs-item[data-variant=\"success\"] {\n --prs-accent-light: #087a55;\n --prs-accent-dark: #34d399;\n}\n\n.prs-item[data-variant=\"error\"] {\n --prs-accent-light: #b42318;\n --prs-accent-dark: #f87171;\n}\n\n.prs-item[data-variant=\"warning\"] {\n --prs-accent-light: #9a4e00;\n --prs-accent-dark: #fbbf24;\n}\n\n.prs-item[data-variant=\"info\"] {\n --prs-accent-light: #1d4ed8;\n --prs-accent-dark: #60a5fa;\n}\n\n.prs-item[data-variant=\"loading\"],\n.prs-item[data-variant=\"custom\"] {\n --prs-accent-light: #6d28d9;\n --prs-accent-dark: #a78bfa;\n}\n\n/* ------------------------------------------------------------------ icon */\n\n.prs-item__icon {\n position: relative;\n z-index: 1;\n display: grid;\n place-items: center;\n width: var(--prs-icon-size);\n height: var(--prs-icon-size);\n margin-top: -1px;\n border-radius: var(--prs-icon-radius);\n color: var(--prs-accent);\n background:\n linear-gradient(180deg, var(--prs-icon-sheen), transparent 70%),\n var(--prs-accent-soft);\n box-shadow:\n inset 0 0 0 1px var(--prs-accent-ring),\n inset 0 1px 0 var(--prs-icon-sheen);\n animation: prs-icon-in 540ms var(--prs-ease-spring) both 30ms;\n}\n\n.prs-item__icon svg {\n display: block;\n width: var(--prs-glyph-size);\n height: var(--prs-glyph-size);\n}\n\n.prs-icon-spin {\n animation: prs-spin 900ms linear infinite;\n transform-origin: center;\n}\n\n/* --------------------------------------------------------------- content */\n\n.prs-item__content {\n position: relative;\n z-index: 1;\n min-width: 0;\n padding-top: 1px;\n}\n\n/* Without a title the content is a single line, so it has to sit centred\n against the icon instead of hanging from the top of the row. */\n.prs-item[data-layout=\"card\"] .prs-item__content[data-has-title=\"false\"] {\n align-self: center;\n padding-top: 0;\n}\n\n.prs-item__title {\n color: var(--prs-fg);\n font-size: var(--prs-title-size);\n font-weight: 650;\n line-height: 1.35;\n letter-spacing: -0.012em;\n overflow-wrap: anywhere;\n}\n\n.prs-item__message {\n color: var(--prs-muted);\n font-size: var(--prs-message-size);\n font-weight: 400;\n line-height: 1.5;\n letter-spacing: -0.004em;\n overflow-wrap: anywhere;\n}\n\n.prs-item__title + .prs-item__message {\n margin-top: 2px;\n}\n\n.prs-item__content[data-has-title=\"false\"] .prs-item__message {\n color: var(--prs-fg);\n font-size: var(--prs-lead-size);\n font-weight: 500;\n letter-spacing: -0.006em;\n}\n\n.prs-item__message a {\n color: var(--prs-accent);\n text-decoration: underline;\n text-decoration-thickness: 1px;\n text-underline-offset: 2px;\n}\n\n.prs-item__actions {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 9px;\n}\n\n.prs-action {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n appearance: none;\n margin: 0;\n padding: var(--prs-action-pad-y) var(--prs-action-pad-x);\n border: 1px solid var(--prs-accent-ring);\n border-radius: 999px;\n background: var(--prs-accent-soft);\n color: var(--prs-accent);\n font-family: inherit;\n font-size: var(--prs-action-size);\n font-weight: 650;\n line-height: 1.35;\n letter-spacing: 0.004em;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n transition:\n background 160ms ease,\n border-color 160ms ease,\n color 160ms ease,\n transform 160ms ease;\n}\n\n.prs-action:hover {\n background: var(--prs-accent-ring);\n}\n\n.prs-action:active {\n transform: scale(0.965);\n}\n\n.prs-action:disabled {\n cursor: progress;\n opacity: 0.72;\n}\n\n.prs-action:focus-visible {\n outline: 2px solid var(--prs-accent);\n outline-offset: 2px;\n}\n\n.prs-action__spinner {\n width: 11px;\n height: 11px;\n border: 1.5px solid var(--prs-accent-ring);\n border-top-color: var(--prs-accent);\n border-radius: 999px;\n animation: prs-spin 700ms linear infinite;\n}\n\n/* ----------------------------------------------------------------- close */\n\n.prs-close {\n position: relative;\n z-index: 1;\n display: grid;\n place-items: center;\n width: var(--prs-close-size);\n height: var(--prs-close-size);\n margin: -3px -3px 0 0;\n padding: 0;\n border: 0;\n border-radius: 8px;\n background: transparent;\n color: var(--prs-muted);\n line-height: 0;\n cursor: pointer;\n opacity: 0.72;\n -webkit-tap-highlight-color: transparent;\n transition:\n background 150ms ease,\n color 150ms ease,\n opacity 150ms ease;\n}\n\n.prs-close svg {\n width: var(--prs-close-icon);\n height: var(--prs-close-icon);\n pointer-events: none;\n}\n\n.prs-close:hover {\n background: var(--prs-track);\n color: var(--prs-fg);\n opacity: 1;\n}\n\n.prs-close:focus-visible {\n outline: 2px solid var(--prs-accent);\n outline-offset: 1px;\n opacity: 1;\n}\n\n/* -------------------------------------------------------------- progress */\n\n.prs-progress {\n position: absolute;\n right: 12px;\n bottom: 6px;\n left: 12px;\n z-index: 1;\n height: 2px;\n overflow: hidden;\n border-radius: 999px;\n background: var(--prs-track);\n pointer-events: none;\n transition: opacity 140ms ease;\n}\n\n.prs-progress__bar {\n display: block;\n width: 100%;\n height: 100%;\n border-radius: inherit;\n background: linear-gradient(\n 90deg,\n var(--prs-accent),\n color-mix(in srgb, var(--prs-accent) 45%, white)\n );\n transform-origin: left center;\n animation-name: prs-progress;\n animation-timing-function: linear;\n animation-fill-mode: forwards;\n}\n\n.prs-item[data-paused=\"true\"] .prs-progress__bar {\n animation-play-state: paused;\n}\n\n.prs-item[data-state=\"exiting\"] .prs-progress {\n opacity: 0;\n}\n\n[dir=\"rtl\"] .prs-progress__bar {\n transform-origin: right center;\n}\n\n/* ------------------------------------------------------------ solid tone */\n\n.prs-item[data-tone=\"solid\"] .prs-item__surface {\n --prs-fg: #fff;\n --prs-muted: rgba(255, 255, 255, 0.78);\n border-color: color-mix(in srgb, var(--prs-solid) 55%, #000);\n background:\n radial-gradient(\n 140% 200% at 0% 0%,\n rgba(255, 255, 255, 0.2),\n transparent 58%\n ),\n linear-gradient(\n 135deg,\n var(--prs-solid),\n color-mix(in srgb, var(--prs-solid) 72%, #000)\n );\n box-shadow:\n 0 1px 0 rgba(255, 255, 255, 0.24) inset,\n 0 12px 28px -14px color-mix(in srgb, var(--prs-solid) 55%, transparent),\n 0 26px 60px -28px var(--prs-shadow-color);\n}\n\n.prs-item[data-tone=\"solid\"] .prs-item__icon {\n color: #fff;\n background: rgba(255, 255, 255, 0.16);\n box-shadow:\n inset 0 0 0 1px rgba(255, 255, 255, 0.22),\n inset 0 1px 0 rgba(255, 255, 255, 0.26);\n}\n\n.prs-item[data-tone=\"solid\"] .prs-close {\n color: rgba(255, 255, 255, 0.82);\n}\n\n.prs-item[data-tone=\"solid\"] .prs-close:hover {\n background: rgba(255, 255, 255, 0.16);\n color: #fff;\n}\n\n.prs-item[data-tone=\"solid\"] .prs-action {\n border-color: rgba(255, 255, 255, 0.24);\n background: rgba(255, 255, 255, 0.16);\n color: #fff;\n}\n\n.prs-item[data-tone=\"solid\"] .prs-action:hover {\n background: rgba(255, 255, 255, 0.24);\n}\n\n.prs-item[data-tone=\"solid\"] .prs-action:focus-visible {\n outline-color: #fff;\n}\n\n.prs-item[data-tone=\"solid\"] .prs-progress {\n background: rgba(255, 255, 255, 0.18);\n}\n\n.prs-item[data-tone=\"solid\"] .prs-progress__bar {\n background: rgba(255, 255, 255, 0.92);\n}\n\n.prs-item[data-tone=\"solid\"] .prs-item__message a {\n color: #fff;\n}\n\n/* ------------------------------------------------------------ paper tone */\n\n/* Matte and opaque: reads like a native OS notification, no blur needed. */\n.prs-item[data-tone=\"paper\"] .prs-item__surface {\n --prs-blur: none;\n --prs-inner: rgba(255, 255, 255, 0.9);\n border-color: rgba(15, 23, 42, 0.09);\n background: #ffffff;\n box-shadow:\n inset 0 1px 0 var(--prs-inner),\n 0 1px 2px rgba(15, 23, 42, 0.06),\n 0 14px 28px -22px rgba(15, 23, 42, 0.45);\n}\n\n@supports (color: light-dark(#000, #fff)) {\n .prs-item[data-tone=\"paper\"] .prs-item__surface {\n --prs-inner: light-dark(\n rgba(255, 255, 255, 0.9),\n rgba(255, 255, 255, 0.05)\n );\n border-color: light-dark(\n rgba(15, 23, 42, 0.09),\n rgba(255, 255, 255, 0.09)\n );\n background: light-dark(#ffffff, #191b23);\n box-shadow:\n inset 0 1px 0 var(--prs-inner),\n 0 1px 2px light-dark(rgba(15, 23, 42, 0.05), rgba(0, 0, 0, 0.5)),\n 0 14px 28px -22px light-dark(rgba(15, 23, 42, 0.4), rgba(0, 0, 0, 0.8));\n }\n}\n\n.prs-item[data-tone=\"paper\"] .prs-item__surface::before {\n opacity: 0.015;\n}\n\n/* --------------------------------------------------------- graphite tone */\n\n/* Dark matte charcoal that holds up on light and dark pages alike. */\n.prs-item[data-tone=\"graphite\"] {\n --prs-accent: var(--prs-accent-dark);\n}\n\n.prs-item[data-tone=\"graphite\"] .prs-item__surface {\n --prs-fg: #f3f5fa;\n --prs-muted: rgba(243, 245, 250, 0.74);\n --prs-track: rgba(255, 255, 255, 0.12);\n --prs-inner: rgba(255, 255, 255, 0.07);\n --prs-blur: none;\n border-color: rgba(255, 255, 255, 0.11);\n background: #1f232c;\n background:\n radial-gradient(\n 120% 150% at 0% 0%,\n rgba(255, 255, 255, 0.06),\n transparent 55%\n ),\n linear-gradient(180deg, #2b303b, #1b1f27);\n box-shadow:\n inset 0 1px 0 var(--prs-inner),\n 0 1px 2px rgba(0, 0, 0, 0.45),\n 0 18px 40px -26px rgba(0, 0, 0, 0.85);\n}\n\n/* ------------------------------------------------------------- neon tone */\n\n/* Near-black card with an accent glow — the loud one, for dev tools. */\n.prs-item[data-tone=\"neon\"] {\n --prs-accent: var(--prs-accent-dark);\n}\n\n.prs-item[data-tone=\"neon\"] .prs-item__surface {\n --prs-fg: #f8fafc;\n --prs-muted: rgba(248, 250, 252, 0.7);\n --prs-track: rgba(255, 255, 255, 0.14);\n --prs-inner: rgba(255, 255, 255, 0.05);\n --prs-blur: none;\n border-color: rgba(255, 255, 255, 0.14);\n background: #080a11;\n box-shadow:\n inset 0 1px 0 var(--prs-inner),\n 0 18px 40px -28px rgba(0, 0, 0, 0.9),\n 0 0 30px -14px var(--prs-accent);\n}\n\n@supports (color: color-mix(in srgb, red, blue)) {\n .prs-item[data-tone=\"neon\"] .prs-item__surface {\n border-color: color-mix(in srgb, var(--prs-accent) 55%, transparent);\n background:\n radial-gradient(\n 120% 160% at 0% 0%,\n color-mix(in srgb, var(--prs-accent) 26%, transparent),\n transparent 58%\n ),\n radial-gradient(\n 120% 160% at 100% 100%,\n color-mix(in srgb, var(--prs-accent) 12%, transparent),\n transparent 62%\n ),\n #080a11;\n box-shadow:\n inset 0 1px 0 var(--prs-inner),\n 0 0 0 1px color-mix(in srgb, var(--prs-accent) 22%, transparent),\n 0 18px 40px -28px color-mix(in srgb, var(--prs-accent) 45%, transparent),\n 0 0 32px -12px color-mix(in srgb, var(--prs-accent) 70%, transparent);\n }\n}\n\n.prs-item[data-tone=\"graphite\"] .prs-item__surface::before,\n.prs-item[data-tone=\"neon\"] .prs-item__surface::before {\n opacity: 0.07;\n}\n\n/* Dark presets need a stronger accent tint for the glyph chip to read. */\n@supports (color: color-mix(in srgb, red, blue)) {\n .prs-item[data-tone=\"graphite\"],\n .prs-item[data-tone=\"neon\"] {\n --prs-accent-soft: color-mix(in srgb, var(--prs-accent) 26%, transparent);\n --prs-accent-ring: color-mix(in srgb, var(--prs-accent) 42%, transparent);\n }\n}\n\n/* ------------------------------------------------------------- keyframes */\n\n@keyframes prs-in {\n 0% {\n opacity: 0;\n transform: translate3d(0, var(--prs-enter-y, 14px), 0) scale(0.94);\n filter: blur(5px);\n }\n 55% {\n opacity: 1;\n }\n 100% {\n opacity: 1;\n transform: none;\n filter: blur(0);\n }\n}\n\n@keyframes prs-out {\n 0% {\n opacity: 1;\n transform: none;\n filter: blur(0);\n }\n 100% {\n opacity: 0;\n transform: translate3d(0, calc(var(--prs-enter-y, 10px) * 0.55), 0)\n scale(0.965);\n filter: blur(2px);\n }\n}\n\n@keyframes prs-icon-in {\n 0% {\n opacity: 0;\n transform: scale(0.55) rotate(-10deg);\n }\n 100% {\n opacity: 1;\n transform: scale(1) rotate(0deg);\n }\n}\n\n@keyframes prs-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes prs-progress {\n from {\n transform: scaleX(1);\n }\n to {\n transform: scaleX(0);\n }\n}\n\n/* ---------------------------------------------------------- reduced motion */\n\n@media (prefers-reduced-motion: reduce) {\n .prs-item,\n .prs-item[data-state=\"exiting\"] {\n animation-duration: 0.01ms !important;\n }\n\n .prs-item__surface {\n transition-duration: 0.01ms !important;\n }\n\n .prs-item__icon {\n animation: none !important;\n }\n\n .prs-icon-spin {\n animation: none !important;\n opacity: 0.7;\n }\n\n .prs-progress__bar {\n animation: none !important;\n transform: scaleX(1);\n opacity: 0.55;\n }\n}\n\n/* --------------------------------------------------------------- compact */\n/* Single-line pill: same card, far less vertical and horizontal space. */\n.prs-item[data-compact=\"true\"] {\n --prs-item-width: auto;\n max-width: var(--prs-width);\n}\n\n.prs-item[data-compact=\"true\"] .prs-item__surface {\n align-items: center;\n column-gap: 8px;\n padding: 7px 8px 7px 10px;\n border-radius: 999px;\n}\n\n.prs-item[data-compact=\"true\"] .prs-item__icon {\n --prs-icon-size: 20px;\n --prs-glyph-size: 12px;\n --prs-icon-radius: 999px;\n margin-top: 0;\n}\n\n.prs-item[data-compact=\"true\"] .prs-item__content {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n padding-top: 0;\n}\n\n.prs-item[data-compact=\"true\"] .prs-item__title {\n display: none;\n}\n\n.prs-item[data-compact=\"true\"] .prs-item__message,\n.prs-item[data-compact=\"true\"]\n .prs-item__content[data-has-title=\"false\"]\n .prs-item__message {\n max-width: 46ch;\n overflow: hidden;\n font-size: 12.5px;\n font-weight: 500;\n line-height: 1.35;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.prs-item[data-compact=\"true\"] .prs-item__actions {\n flex-shrink: 0;\n margin-top: 0;\n}\n\n.prs-item[data-compact=\"true\"] .prs-action {\n padding: 3px 9px;\n font-size: 11.5px;\n}\n\n.prs-item[data-compact=\"true\"] .prs-close {\n --prs-close-size: 22px;\n --prs-close-icon: 11px;\n margin: 0;\n}\n\n/* ---------------------------------------------------------------- inline */\n/* Message-only status line: content width, one line, no title, no hairline. */\n.prs-item[data-layout=\"inline\"] {\n --prs-item-width: auto;\n max-width: min(420px, 100%);\n}\n\n.prs-item[data-layout=\"inline\"] .prs-item__surface {\n align-items: center;\n column-gap: 9px;\n padding: 8px 13px 8px 9px;\n border-radius: var(--prs-radius-inline, 12px);\n}\n\n.prs-item[data-layout=\"inline\"] .prs-item__icon {\n --prs-icon-size: 22px;\n --prs-glyph-size: 13px;\n --prs-icon-radius: 999px;\n flex: none;\n margin-top: 0;\n}\n\n.prs-item[data-layout=\"inline\"] .prs-item__content {\n min-width: 0;\n padding-top: 0;\n}\n\n.prs-item[data-layout=\"inline\"] .prs-item__title {\n display: none;\n}\n\n.prs-item[data-layout=\"inline\"] .prs-item__message {\n overflow: hidden;\n font-size: 13px;\n font-weight: 500;\n line-height: 1.4;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.prs-item[data-layout=\"inline\"] .prs-item__actions {\n margin-top: 0;\n}\n\n.prs-item[data-layout=\"inline\"] .prs-action {\n padding: 2px 8px;\n font-size: 11.5px;\n}\n\n.prs-item[data-layout=\"inline\"] .prs-close {\n --prs-close-size: 22px;\n --prs-close-icon: 11px;\n margin: 0;\n}\n\n/* -------------------------------------------------------------- minimized */\n/* The whole stack collapses into one summary pill; click to expand. */\n.prs-region--minimized {\n width: auto;\n padding: var(--prs-offset);\n}\n\n.prs-minimized {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n appearance: none;\n margin: 0;\n padding: 8px 15px 8px 12px;\n border: 1px solid var(--prs-border);\n border-radius: 999px;\n background: var(--prs-surface);\n color: var(--prs-fg);\n font-family: inherit;\n font-size: 12.5px;\n font-weight: 560;\n letter-spacing: -0.005em;\n cursor: pointer;\n pointer-events: auto;\n box-shadow: var(--prs-shadow), inset 0 1px 0 var(--prs-inner);\n -webkit-backdrop-filter: var(--prs-blur);\n backdrop-filter: var(--prs-blur);\n animation: prs-minimized-in 220ms var(--prs-ease-out);\n transition:\n border-color 160ms ease,\n box-shadow 160ms ease,\n transform 160ms ease;\n}\n\n.prs-minimized:hover {\n border-color: var(--prs-accent-ring);\n box-shadow: var(--prs-shadow), 0 0 0 3px var(--prs-accent-soft);\n}\n\n.prs-minimized:active {\n transform: scale(0.97);\n}\n\n.prs-minimized:focus-visible {\n outline: 2px solid var(--prs-accent);\n outline-offset: 2px;\n}\n\n.prs-minimized__dot {\n width: 7px;\n height: 7px;\n border-radius: 999px;\n background: var(--prs-accent);\n box-shadow: 0 0 0 3px var(--prs-accent-soft);\n}\n\n@keyframes prs-minimized-in {\n from {\n opacity: 0;\n transform: translate3d(0, 6px, 0) scale(0.96);\n }\n to {\n opacity: 1;\n transform: translate3d(0, 0, 0) scale(1);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .prs-minimized {\n animation: none;\n }\n}\n\n/* ------------------------------------------------------------- animations */\n/*\n * Presets selected with `animation`, `enterAnimation` or `exitAnimation`.\n * Pace them with --prs-enter-duration / --prs-exit-duration.\n */\n\n.prs-item[data-state=\"visible\"][data-enter=\"fade\"] {\n animation: prs-fade-in var(--prs-enter-duration, 260ms) ease both;\n}\n\n.prs-item[data-state=\"exiting\"][data-exit=\"fade\"] {\n animation: prs-fade-out var(--prs-exit-duration, 180ms) ease both;\n}\n\n.prs-item[data-state=\"visible\"][data-enter=\"scale\"] {\n animation: prs-scale-in var(--prs-enter-duration, 300ms) var(--prs-ease-out)\n both;\n}\n\n.prs-item[data-state=\"exiting\"][data-exit=\"scale\"] {\n animation: prs-scale-out var(--prs-exit-duration, 170ms) ease both;\n}\n\n.prs-item[data-state=\"visible\"][data-enter=\"pop\"] {\n animation: prs-pop-in var(--prs-enter-duration, 460ms) var(--prs-ease-spring)\n both;\n}\n\n.prs-item[data-state=\"exiting\"][data-exit=\"pop\"] {\n animation: prs-pop-out var(--prs-exit-duration, 210ms) ease both;\n}\n\n.prs-item[data-state=\"visible\"][data-enter=\"flip\"] {\n animation: prs-flip-in var(--prs-enter-duration, 420ms) var(--prs-ease-out)\n both;\n}\n\n.prs-item[data-state=\"exiting\"][data-exit=\"flip\"] {\n animation: prs-flip-out var(--prs-exit-duration, 220ms) ease both;\n}\n\n.prs-item[data-state=\"visible\"][data-enter=\"none\"] {\n animation: none;\n}\n\n.prs-item[data-state=\"exiting\"][data-exit=\"none\"] {\n animation: none;\n}\n\n.prs-item[data-enter=\"none\"] .prs-item__icon {\n animation: none;\n}\n\n@keyframes prs-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes prs-fade-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n\n@keyframes prs-scale-in {\n from {\n opacity: 0;\n transform: scale(0.86);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n@keyframes prs-scale-out {\n from {\n opacity: 1;\n transform: scale(1);\n }\n to {\n opacity: 0;\n transform: scale(0.9);\n }\n}\n\n@keyframes prs-pop-in {\n 0% {\n opacity: 0;\n transform: scale(0.72);\n }\n 55% {\n opacity: 1;\n transform: scale(1.06);\n }\n 78% {\n transform: scale(0.985);\n }\n 100% {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n@keyframes prs-pop-out {\n 0% {\n opacity: 1;\n transform: scale(1);\n }\n 35% {\n opacity: 1;\n transform: scale(1.04);\n }\n 100% {\n opacity: 0;\n transform: scale(0.85);\n }\n}\n\n@keyframes prs-flip-in {\n from {\n opacity: 0;\n transform: perspective(900px) rotateX(-70deg);\n }\n to {\n opacity: 1;\n transform: perspective(900px) rotateX(0deg);\n }\n}\n\n@keyframes prs-flip-out {\n from {\n opacity: 1;\n transform: perspective(900px) rotateX(0deg);\n }\n to {\n opacity: 0;\n transform: perspective(900px) rotateX(70deg);\n }\n}\r\n"],"mappings":";AACA,CAAC;AACC;AAAA,IACE,WAAW;AAAA,IAAE,KAAK;AAAA,IAAE,aAAa;AAAA,IAAE,SAAS;AAAA,IAAE,aAAa;AAAA,IAAE,UAAU;AAAA,IACvE,MAAM;AAAA,IAAE,gBAAgB;AAAA,IAAE,KAAK;AAAA,IAAE;AACnC,gBAAc;AACd,eAAa;AACb,gBAAc;AACd,aAAW;AACX,iBAAe;AAEf,iBAAe,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACnC,YAAU;AACV,eAAa;AACb,gBAAc,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC/B,uBAAqB,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACtC,sBAAoB,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACrC,eAAa,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACjC,oBAAkB,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACtC,eAAa,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9B,cAAY,KAAK,MAAM,SAAS;AAEhC;AAAA,IACE,EAAE,IAAI,IAAI,KAAK,IAAI,mBAAmB;AAAA,IACtC,EAAE,KAAK,KAAK,MAAM,IAAI,mBAAmB;AAAA,IACzC,EAAE,KAAK,KAAK,MAAM,IAAI;AACxB;AAAA,IACE,EAAE,IAAI,IAAI,KAAK,IAAI,mBAAmB;AAAA,IACtC,EAAE,KAAK,KAAK,MAAM,IAAI,mBAAmB;AAAA,IACzC,EAAE,KAAK,KAAK,MAAM,IAAI;AACxB,qBAAmB,aAAa,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;AAChD,kBAAgB,aAAa,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE;AAE5C,YAAU;AACV,SAAO;AACP,WAAS,IAAI;AACb,kBAAgB;AAChB,eAAa,IAAI;AACjB,gBAAc;AACd,0BAAwB;AACxB,2BAAyB;AACzB,kBAAgB;AAClB;AAEA,CA3CC,QA2CQ,CAAC;AACR,gBAAc;AAChB;AAEA,CA/CC,QA+CQ,CAAC;AACR,gBAAc,MAAM;AACtB;AAEA,UAAU,CAAC,KAAK,EAAE,WAAW,IAAI,EAAE;AACjC,GApDD;AAqDG,mBAAe,WAAW,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACrE,cAAU,WAAW,OAAO,EAAE;AAC9B,iBAAa,WAAW,OAAO,EAAE;AACjC,kBAAc,WAAW,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACpE,yBAAqB,YACnB,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EACtB,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAEtB,wBAAoB,YAClB,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EACrB,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAEhB,iBAAa,YACX,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EACxB,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAEtB,sBAAkB,YAChB,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EACxB,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAEtB,iBAAa,YACX,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EACtB,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAExB;AACF;AAIA,CAAC;AACC,YAAU;AACV,WAAS;AACT,kBAAgB;AAChB,OAAK,IAAI;AACT,cAAY;AACZ,SAAO,IAAI,KAAK,IAAI,aAAa,EAAE,KAAK,EAAE,IAAI,cAAc,EAAE,EAAE,EAAE;AAClE,WAAS,IAAI;AACb,kBAAgB;AAClB;AAEA,CAXC,UAWU,CAAC;AACV,OAAK;AACL,eAAa,KAAK,IAAI,cAAc,EAAE,IAAI,mBAAmB,EAAE;AAC/D,iBAAe;AACjB;AAEA,CAjBC,UAiBU,CAAC;AACV,UAAQ;AACR,kBAAgB,KAAK,IAAI,cAAc,EAAE,IAAI,sBAAsB,EAAE;AACrE,iBAAe;AACjB;AAEA,CAvBC,UAuBU,CAAC;AACV,QAAM;AACN,eAAa;AACf;AAEA,CA5BC,UA4BU,CAAC;AACV,SAAO;AACP,eAAa;AACf;AAEA,CAjCC,UAiCU,CAAC;AACV,QAAM;AACN,aAAW,WAAW;AACtB,eAAa;AACf;AAIA,CAAC;AACC,oBAAkB,IAAI;AACtB,iBAAe;AACf,mBAAiB;AACjB,oBAAkB;AAClB,kBAAgB;AAChB,iBAAe;AACf,mBAAiB;AACjB,qBAAmB;AACnB,oBAAkB;AAClB,oBAAkB;AAClB,sBAAoB;AACpB,mBAAiB;AACjB,qBAAmB;AACnB,sBAAoB;AACpB,sBAAoB;AACpB,oBAAkB;AAClB,oBAAkB;AAElB,YAAU;AACV,SAAO,IAAI;AACX,aAAW;AACX,kBAAgB;AAChB,oBAAkB,OAAO;AACzB,aAAW,OAAO,IAAI,oBAAoB,EAAE,OAAO,IAAI,mBAAmB;AAC1E,eAAa,SAAS,EAAE;AAC1B;AAEA,CA5BC,QA4BQ,CAAC;AACR,oBAAkB,KAAK,IAAI,aAAa,EAAE;AAC1C,gBAAc;AACd,iBAAe;AACf,mBAAiB;AACjB,oBAAkB;AAClB,kBAAgB;AAChB,iBAAe;AACf,mBAAiB;AACjB,qBAAmB;AACnB,oBAAkB;AAClB,oBAAkB;AAClB,sBAAoB;AACpB,mBAAiB;AACjB,qBAAmB;AACnB,sBAAoB;AACpB,sBAAoB;AACpB,oBAAkB;AAClB,oBAAkB;AACpB;AAEA,CAjDC,QAiDQ,CAAC;AACR,oBAAkB,KAAK,IAAI,aAAa,EAAE;AAC1C,gBAAc;AACd,iBAAe;AACf,mBAAiB;AACjB,oBAAkB;AAClB,kBAAgB;AAChB,iBAAe;AACf,mBAAiB;AACjB,qBAAmB;AACnB,oBAAkB;AAClB,oBAAkB;AAClB,sBAAoB;AACpB,mBAAiB;AACjB,qBAAmB;AACnB,sBAAoB;AACpB,sBAAoB;AACpB,oBAAkB;AAClB,oBAAkB;AACpB;AAEA,CAtEC,QAsEQ,CAAC;AACR,oBAAkB,KAAK,IAAI,aAAa,EAAE;AAC1C,gBAAc;AACd,iBAAe;AACf,mBAAiB;AACjB,oBAAkB;AAClB,kBAAgB;AAChB,iBAAe;AACf,mBAAiB;AACjB,qBAAmB;AACnB,oBAAkB;AAClB,oBAAkB;AAClB,sBAAoB;AACpB,mBAAiB;AACjB,qBAAmB;AACnB,sBAAoB;AACpB,sBAAoB;AACpB,oBAAkB;AAClB,oBAAkB;AACpB;AAEA,CA3FC,QA2FQ,CAAC;AACR,oBAAkB,IAAI;AACxB;AAEA,CA/FC,QA+FQ,CAAC;AACR,kBAAgB;AAChB,aAAW,QAAQ,IAAI,mBAAmB,EAAE,OAC1C,aAAa,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG;AAC/B;AAEA,CArGC,QAqGQ,CAAC;AACR,eAAa;AACb,uBAAqB;AACvB;AAEA,CAAC;AACC,YAAU;AACV,WAAS;AACT,yBAAuB,KAAK,OAAO,CAAC,EAAE,KAAK;AAC3C,eAAa;AACb,cAAY,IAAI;AAChB,cAAY;AACZ,SAAO;AACP,WAAS,IAAI,eAAe,IAAI,iBAAiB,IAAI,kBACnD,IAAI;AACN,YAAU;AACV,aAAW;AACX,UAAQ,IAAI,MAAM,IAAI;AACtB,iBAAe,IAAI;AACnB;AAAA,IACE;AAAA,MACE,KAAK,KAAK,GAAG,GAAG,EAAE;AAAA,MAClB,IAAI,iBAAiB,EAAE,YAAY;AAAA,MACnC,YAAY,IACb;AAAA,IACD;AAAA,MAAgB,MAAM;AAAA,MAAE,IAAI,YAAY;AAAA,MAAE,YAAY,IAAI;AAAA,IAC1D,IAAI;AACN,cAAY,IAAI,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI;AACjD,SAAO,IAAI;AACX,2BAAyB,IAAI;AAC7B,mBAAiB,IAAI;AACrB,aAAW,YAAY,IAAI,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE;AAChD,WAAS,IAAI,kBAAkB,EAAE;AACjC;AAAA,IACE,UAAU,MAAM,IAAI,eAAe;AAAA,IACnC,QAAQ,MAAM,IAAI;AAAA,IAClB,aAAa,MAAM,IAAI;AAAA,IACvB,WAAW,MAAM;AACnB,gBAAc;AAChB;AAGA,CArCC,iBAqCiB;AAChB,WAAS;AACT,YAAU;AACV,SAAO;AACP,WAAS;AACT,iBAAe;AACf,kBAAgB;AAChB,WAAS;AACT,kBAAgB;AAChB,oBAAkB;AACpB;AAEA,CA3JC,QA2JQ,CAAC,oBAAsB,CAjD/B;AAkDC,cAAY;AACd;AAEA,QAAO,OAAQ,YAAW,SAAU;AAClC,GAtDD,iBAsDmB;AAChB,kBAAc,IAAI,iBAAiB,EAAE,IAAI;AACzC,gBAAY,IAAI,mBAAmB,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI;AACzD;AACF;AAEA,CAtKC,QAsKQ,CAAC,qBAAuB,CA5DhC;AA6DC,yBAAuB,OAAO,CAAC,EAAE,KAAK;AACxC;AAEA,CA1KC,QA0KQ,CAAC,uBAAyB,CAAC,oBAAsB,CAhEzD;AAiEC,yBAAuB,KAAK,OAAO,CAAC,EAAE;AACxC;AAEA,CA9KC,QA8KQ,CAAC,uBAAyB,CAAC,qBAAuB,CApE1D;AAqEC,yBAAuB,OAAO,CAAC,EAAE;AACnC;AAIA,CApLC;AAqLC,sBAAoB;AACpB,qBAAmB;AACnB,gBAAc,IAAI;AAClB,eAAa,IAAI;AACjB,qBAAmB,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;AACrC,qBAAmB,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;AACvC;AAEA,UAAU,CAAC,KAAK,EAAE,WAAW,IAAI,EAAE;AACjC,GA9LD;AA+LG,kBAAc,WAAW,IAAI,mBAAmB,EAAE,IAAI;AACxD;AACF;AAEA,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,EAAE;AACxC,GApMD;AAqMG,uBAAmB,WACjB,GAAG,IAAI,EACP,IAAI,cAAc,GAAG,EACrB;AAEF,uBAAmB,WACjB,GAAG,IAAI,EACP,IAAI,cAAc,GAAG,EACrB;AAEJ;AACF;AAEA,CAlNC,QAkNQ,CAAC;AACR,sBAAoB;AACpB,qBAAmB;AACrB;AAEA,CAvNC,QAuNQ,CAAC;AACR,sBAAoB;AACpB,qBAAmB;AACrB;AAEA,CA5NC,QA4NQ,CAAC;AACR,sBAAoB;AACpB,qBAAmB;AACrB;AAEA,CAjOC,QAiOQ,CAAC;AACR,sBAAoB;AACpB,qBAAmB;AACrB;AAEA,CAtOC,QAsOQ,CAAC;AACV,CAvOC,QAuOQ,CAAC;AACR,sBAAoB;AACpB,qBAAmB;AACrB;AAIA,CAAC;AACC,YAAU;AACV,WAAS;AACT,WAAS;AACT,eAAa;AACb,SAAO,IAAI;AACX,UAAQ,IAAI;AACZ,cAAY;AACZ,iBAAe,IAAI;AACnB,SAAO,IAAI;AACX;AAAA,IACE;AAAA,MAAgB,MAAM;AAAA,MAAE,IAAI,iBAAiB;AAAA,MAAE,YAAY,IAAI;AAAA,IAC/D,IAAI;AACN,cACE,MAAM,EAAE,EAAE,EAAE,IAAI,IAAI,kBAAkB,EACtC,MAAM,EAAE,IAAI,EAAE,IAAI;AACpB,aAAW,YAAY,MAAM,IAAI,mBAAmB,KAAK;AAC3D;AAEA,CAnBC,eAmBe;AACd,WAAS;AACT,SAAO,IAAI;AACX,UAAQ,IAAI;AACd;AAEA,CAAC;AACC,aAAW,SAAS,MAAM,OAAO;AACjC,oBAAkB;AACpB;AAIA,CAAC;AACC,YAAU;AACV,WAAS;AACT,aAAW;AACX,eAAa;AACf;AAIA,CAvRC,QAuRQ,CAAC,kBAAoB,CAT7B,iBAS+C,CAAC;AAC/C,cAAY;AACZ,eAAa;AACf;AAEA,CAAC;AACC,SAAO,IAAI;AACX,aAAW,IAAI;AACf,eAAa;AACb,eAAa;AACb,kBAAgB;AAChB,iBAAe;AACjB;AAEA,CAAC;AACC,SAAO,IAAI;AACX,aAAW,IAAI;AACf,eAAa;AACb,eAAa;AACb,kBAAgB;AAChB,iBAAe;AACjB;AAEA,CAlBC,gBAkBgB,EAAE,CATlB;AAUC,cAAY;AACd;AAEA,CApCC,iBAoCiB,CAAC,sBAAwB,CAb1C;AAcC,SAAO,IAAI;AACX,aAAW,IAAI;AACf,eAAa;AACb,kBAAgB;AAClB;AAEA,CApBC,kBAoBkB;AACjB,SAAO,IAAI;AACX,mBAAiB;AACjB,6BAA2B;AAC3B,yBAAuB;AACzB;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK;AACL,cAAY;AACd;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK;AACL,cAAY;AACZ,UAAQ;AACR,WAAS,IAAI,oBAAoB,IAAI;AACrC,UAAQ,IAAI,MAAM,IAAI;AACtB,iBAAe;AACf,cAAY,IAAI;AAChB,SAAO,IAAI;AACX,eAAa;AACb,aAAW,IAAI;AACf,eAAa;AACb,eAAa;AACb,kBAAgB;AAChB,UAAQ;AACR,+BAA6B;AAC7B;AAAA,IACE,WAAW,MAAM,IAAI;AAAA,IACrB,aAAa,MAAM,IAAI;AAAA,IACvB,MAAM,MAAM,IAAI;AAAA,IAChB,UAAU,MAAM;AACpB;AAEA,CAzBC,UAyBU;AACT,cAAY,IAAI;AAClB;AAEA,CA7BC,UA6BU;AACT,aAAW,MAAM;AACnB;AAEA,CAjCC,UAiCU;AACT,UAAQ;AACR,WAAS;AACX;AAEA,CAtCC,UAsCU;AACT,WAAS,IAAI,MAAM,IAAI;AACvB,kBAAgB;AAClB;AAEA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,UAAQ,MAAM,MAAM,IAAI;AACxB,oBAAkB,IAAI;AACtB,iBAAe;AACf,aAAW,SAAS,MAAM,OAAO;AACnC;AAIA,CAAC;AACC,YAAU;AACV,WAAS;AACT,WAAS;AACT,eAAa;AACb,SAAO,IAAI;AACX,UAAQ,IAAI;AACZ,UAAQ,KAAK,KAAK,EAAE;AACpB,WAAS;AACT,UAAQ;AACR,iBAAe;AACf,cAAY;AACZ,SAAO,IAAI;AACX,eAAa;AACb,UAAQ;AACR,WAAS;AACT,+BAA6B;AAC7B;AAAA,IACE,WAAW,MAAM,IAAI;AAAA,IACrB,MAAM,MAAM,IAAI;AAAA,IAChB,QAAQ,MAAM;AAClB;AAEA,CAvBC,UAuBU;AACT,SAAO,IAAI;AACX,UAAQ,IAAI;AACZ,kBAAgB;AAClB;AAEA,CA7BC,SA6BS;AACR,cAAY,IAAI;AAChB,SAAO,IAAI;AACX,WAAS;AACX;AAEA,CAnCC,SAmCS;AACR,WAAS,IAAI,MAAM,IAAI;AACvB,kBAAgB;AAChB,WAAS;AACX;AAIA,CAAC;AACC,YAAU;AACV,SAAO;AACP,UAAQ;AACR,QAAM;AACN,WAAS;AACT,UAAQ;AACR,YAAU;AACV,iBAAe;AACf,cAAY,IAAI;AAChB,kBAAgB;AAChB,cAAY,QAAQ,MAAM;AAC5B;AAEA,CAAC;AACC,WAAS;AACT,SAAO;AACP,UAAQ;AACR,iBAAe;AACf;AAAA,IAAY;AAAA,MACV,KAAK;AAAA,MACL,IAAI,aAAa;AAAA,MACjB,UAAU,GAAG,IAAI,EAAE,IAAI,cAAc,GAAG,EAAE;AAE5C,oBAAkB,KAAK;AACvB,kBAAgB;AAChB,6BAA2B;AAC3B,uBAAqB;AACvB;AAEA,CAtcC,QAscQ,CAAC,kBAAoB,CAhB7B;AAiBC,wBAAsB;AACxB;AAEA,CA1cC,QA0cQ,CAAC,oBAAsB,CAlC/B;AAmCC,WAAS;AACX;AAEA,CAAC,SAAW,CAxBX;AAyBC,oBAAkB,MAAM;AAC1B;AAIA,CApdC,QAodQ,CAAC,iBAAmB,CA1W5B;AA2WC,YAAU;AACV,eAAa,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACjC,gBAAc,UAAU,GAAG,IAAI,EAAE,IAAI,aAAa,GAAG,EAAE;AACvD;AAAA,IACE;AAAA,MACE,KAAK,KAAK,GAAG,GAAG,EAAE;AAAA,MAClB,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;AAAA,MACxB,YAAY,IACb;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,IAAI,YAAY;AAAA,MAChB,UAAU,GAAG,IAAI,EAAE,IAAI,aAAa,GAAG,EAAE;AAE7C;AAAA,IACE,EAAE,IAAI,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,KAAK;AAAA,IACvC,EAAE,KAAK,KAAK,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,aAAa,GAAG,EAAE,YAAY;AAAA,IACvE,EAAE,KAAK,KAAK,MAAM,IAAI;AAC1B;AAEA,CAzeC,QAyeQ,CAAC,iBAAmB,CA3P5B;AA4PC,SAAO;AACP,cAAY,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAChC,cACE,MAAM,EAAE,EAAE,EAAE,IAAI,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EACzC,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACtC;AAEA,CAjfC,QAifQ,CAAC,iBAAmB,CApH5B;AAqHC,SAAO,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAC7B;AAEA,CArfC,QAqfQ,CAAC,iBAAmB,CAxH5B,SAwHsC;AACrC,cAAY,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAChC,SAAO;AACT;AAEA,CA1fC,QA0fQ,CAAC,iBAAmB,CAnL5B;AAoLC,gBAAc,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAClC,cAAY,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAChC,SAAO;AACT;AAEA,CAhgBC,QAggBQ,CAAC,iBAAmB,CAzL5B,UAyLuC;AACtC,cAAY,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAClC;AAEA,CApgBC,QAogBQ,CAAC,iBAAmB,CA7L5B,UA6LuC;AACtC,iBAAe;AACjB;AAEA,CAxgBC,QAwgBQ,CAAC,iBAAmB,CAhG5B;AAiGC,cAAY,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAClC;AAEA,CA5gBC,QA4gBQ,CAAC,iBAAmB,CAtF5B;AAuFC,cAAY,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAClC;AAEA,CAhhBC,QAghBQ,CAAC,iBAAmB,CA3O5B,kBA2O+C;AAC9C,SAAO;AACT;AAKA,CAvhBC,QAuhBQ,CAAC,iBAAmB,CA7a5B;AA8aC,cAAY;AACZ,eAAa,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACjC,gBAAc,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC/B,cAAY;AACZ;AAAA,IACE,MAAM,EAAE,IAAI,EAAE,IAAI,YAAY;AAAA,IAC9B,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK;AAAA,IAChC,EAAE,KAAK,KAAK,MAAM,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACvC;AAEA,UAAU,CAAC,KAAK,EAAE,WAAW,IAAI,EAAE;AACjC,GAniBD,QAmiBU,CAAC,iBAAmB,CAzb9B;AA0bG,iBAAa,YACX,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EACxB,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAEtB,kBAAc,WACZ,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EACtB,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAEtB,gBAAY,WAAW,OAAO,EAAE;AAChC;AAAA,MACE,MAAM,EAAE,IAAI,EAAE,IAAI,YAAY;AAAA,MAC9B,EAAE,IAAI,IAAI,WAAW,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK;AAAA,MAChE,EAAE,KAAK,KAAK,MAAM,WAAW,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACtE;AACF;AAEA,CApjBC,QAojBQ,CAAC,iBAAmB,CA1c5B,iBA0c8C;AAC7C,WAAS;AACX;AAKA,CA3jBC,QA2jBQ,CAAC;AACR,gBAAc,IAAI;AACpB;AAEA,CA/jBC,QA+jBQ,CAAC,oBAAsB,CArd/B;AAsdC,YAAU;AACV,eAAa,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACjC,eAAa,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACjC,eAAa,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACjC,cAAY;AACZ,gBAAc,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAClC,cAAY;AACZ;AAAA,IACE;AAAA,MACE,KAAK,KAAK,GAAG,GAAG,EAAE;AAAA,MAClB,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;AAAA,MACzB,YAAY,IACb;AAAA,IACD;AAAA,MAAgB,MAAhB;AAAA,MAAwB,OAAxB;AAAA,MAAiC;AACnC;AAAA,IACE,MAAM,EAAE,IAAI,EAAE,IAAI,YAAY;AAAA,IAC9B,EAAE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK;AAAA,IAC7B,EAAE,KAAK,KAAK,MAAM,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACpC;AAKA,CAvlBC,QAulBQ,CAAC;AACR,gBAAc,IAAI;AACpB;AAEA,CA3lBC,QA2lBQ,CAAC,gBAAkB,CAjf3B;AAkfC,YAAU;AACV,eAAa,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACjC,eAAa,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACjC,eAAa,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACjC,cAAY;AACZ,gBAAc,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAClC,cAAY;AACZ;AAAA,IACE,MAAM,EAAE,IAAI,EAAE,IAAI,YAAY;AAAA,IAC9B,EAAE,KAAK,KAAK,MAAM,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI;AAAA,IACpC,EAAE,EAAE,KAAK,MAAM,IAAI;AACvB;AAEA,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,EAAE;AACxC,GA1mBD,QA0mBU,CAAC,gBAAkB,CAhgB7B;AAigBG,kBAAc,UAAU,GAAG,IAAI,EAAE,IAAI,cAAc,GAAG,EAAE;AACxD;AAAA,MACE;AAAA,QACE,KAAK,KAAK,GAAG,GAAG,EAAE;AAAA,QAClB,UAAU,GAAG,IAAI,EAAE,IAAI,cAAc,GAAG,EAAE,YAAY;AAAA,QACtD,YAAY,IACb;AAAA,MACD;AAAA,QACE,KAAK,KAAK,GAAG,KAAK,IAAI;AAAA,QACtB,UAAU,GAAG,IAAI,EAAE,IAAI,cAAc,GAAG,EAAE,YAAY;AAAA,QACtD,YAAY,IACb;AAAA,MACD;AACF;AAAA,MACE,MAAM,EAAE,IAAI,EAAE,IAAI,YAAY;AAAA,MAC9B,EAAE,EAAE,EAAE,IAAI,UAAU,GAAG,IAAI,EAAE,IAAI,cAAc,GAAG,EAAE,YAAY;AAAA,MAChE,EAAE,KAAK,KAAK,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,cAAc,GAAG,EAAE,YAAY;AAAA,MACxE,EAAE,EAAE,KAAK,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,cAAc,GAAG,EAAE;AAC7D;AACF;AAEA,CAhoBC,QAgoBQ,CAAC,oBAAsB,CAthB/B,iBAshBiD;AAClD,CAjoBC,QAioBQ,CAAC,gBAAkB,CAvhB3B,iBAuhB6C;AAC5C,WAAS;AACX;AAGA,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,EAAE;AACxC,GAvoBD,QAuoBU,CAAC;AAAA,EACV,CAxoBD,QAwoBU,CAAC;AACR,uBAAmB,UAAU,GAAG,IAAI,EAAE,IAAI,cAAc,GAAG,EAAE;AAC7D,uBAAmB,UAAU,GAAG,IAAI,EAAE,IAAI,cAAc,GAAG,EAAE;AAC/D;AACF;AAIA,WAxnBa;AAynBX;AACE,aAAS;AACT,eAAW,YAAY,CAAC,EAAE,IAAI,aAAa,EAAE,KAAK,EAAE,GAAG,MAAM;AAC7D,YAAQ,KAAK;AACf;AACA;AACE,aAAS;AACX;AACA;AACE,aAAS;AACT,eAAW;AACX,YAAQ,KAAK;AACf;AACF;AAEA,WA/jBa;AAgkBX;AACE,aAAS;AACT,eAAW;AACX,YAAQ,KAAK;AACf;AACA;AACE,aAAS;AACT,eAAW,YAAY,CAAC,EAAE,KAAK,IAAI,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,GAC/D,MAAM;AACR,YAAQ,KAAK;AACf;AACF;AAEA,WAhba;AAibX;AACE,aAAS;AACT,eAAW,MAAM,MAAM,OAAO;AAChC;AACA;AACE,aAAS;AACT,eAAW,MAAM,GAAG,OAAO;AAC7B;AACF;AAEA,WAjba;AAkbX;AACE,eAAW,OAAO;AACpB;AACF;AAEA,WAvRC;AAwRC;AACE,eAAW,OAAO;AACpB;AACA;AACE,eAAW,OAAO;AACpB;AACF;AAIA,QAAO,wBAAyB;AAC9B,GA3sBD;AAAA,EA4sBC,CA5sBD,QA4sBU,CAAC;AACR,wBAAoB;AACtB;AAEA,GAtmBD;AAumBG,yBAAqB;AACvB;AAEA,GAteD;AAueG,eAAW;AACb;AAEA,GAjdD;AAkdG,eAAW;AACX,aAAS;AACX;AAEA,GAvSD;AAwSG,eAAW;AACX,eAAW,OAAO;AAClB,aAAS;AACX;AACF;AAIA,CAtuBC,QAsuBQ,CAAC;AACR,oBAAkB;AAClB,aAAW,IAAI;AACjB;AAEA,CA3uBC,QA2uBQ,CAAC,mBAAqB,CAjoB9B;AAkoBC,eAAa;AACb,cAAY;AACZ,WAAS,IAAI,IAAI,IAAI;AACrB,iBAAe;AACjB;AAEA,CAlvBC,QAkvBQ,CAAC,mBAAqB,CApgB9B;AAqgBC,mBAAiB;AACjB,oBAAkB;AAClB,qBAAmB;AACnB,cAAY;AACd;AAEA,CAzvBC,QAyvBQ,CAAC,mBAAqB,CA3e9B;AA4eC,WAAS;AACT,eAAa;AACb,OAAK;AACL,aAAW;AACX,eAAa;AACf;AAEA,CAjwBC,QAiwBQ,CAAC,mBAAqB,CAre9B;AAseC,WAAS;AACX;AAEA,CArwBC,QAqwBQ,CAAC,mBAAqB,CAhe9B;AAieD,CAtwBC,QAswBQ,CAAC,mBACR,CAzfD,iBAyfmB,CAAC,sBACnB,CAneD;AAoeC,aAAW;AACX,YAAU;AACV,aAAW;AACX,eAAa;AACb,eAAa;AACb,eAAa;AACb,iBAAe;AACjB;AAEA,CAlxBC,QAkxBQ,CAAC,mBAAqB,CAld9B;AAmdC,eAAa;AACb,cAAY;AACd;AAEA,CAvxBC,QAuxBQ,CAAC,mBAAqB,CAhd9B;AAidC,WAAS,IAAI;AACb,aAAW;AACb;AAEA,CA5xBC,QA4xBQ,CAAC,mBAAqB,CA/Z9B;AAgaC,oBAAkB;AAClB,oBAAkB;AAClB,UAAQ;AACV;AAIA,CApyBC,QAoyBQ,CAAC;AACR,oBAAkB;AAClB,aAAW,IAAI,KAAK,EAAE;AACxB;AAEA,CAzyBC,QAyyBQ,CAAC,oBAAsB,CA/rB/B;AAgsBC,eAAa;AACb,cAAY;AACZ,WAAS,IAAI,KAAK,IAAI;AACtB,iBAAe,IAAI,mBAAmB,EAAE;AAC1C;AAEA,CAhzBC,QAgzBQ,CAAC,oBAAsB,CAlkB/B;AAmkBC,mBAAiB;AACjB,oBAAkB;AAClB,qBAAmB;AACnB,QAAM;AACN,cAAY;AACd;AAEA,CAxzBC,QAwzBQ,CAAC,oBAAsB,CA1iB/B;AA2iBC,aAAW;AACX,eAAa;AACf;AAEA,CA7zBC,QA6zBQ,CAAC,oBAAsB,CAjiB/B;AAkiBC,WAAS;AACX;AAEA,CAj0BC,QAi0BQ,CAAC,oBAAsB,CA5hB/B;AA6hBC,YAAU;AACV,aAAW;AACX,eAAa;AACb,eAAa;AACb,eAAa;AACb,iBAAe;AACjB;AAEA,CA10BC,QA00BQ,CAAC,oBAAsB,CA1gB/B;AA2gBC,cAAY;AACd;AAEA,CA90BC,QA80BQ,CAAC,oBAAsB,CAvgB/B;AAwgBC,WAAS,IAAI;AACb,aAAW;AACb;AAEA,CAn1BC,QAm1BQ,CAAC,oBAAsB,CAtd/B;AAudC,oBAAkB;AAClB,oBAAkB;AAClB,UAAQ;AACV;AAIA,CAAC;AACC,SAAO;AACP,WAAS,IAAI;AACf;AAEA,CAAC;AACC,WAAS;AACT,eAAa;AACb,OAAK;AACL,cAAY;AACZ,UAAQ;AACR,WAAS,IAAI,KAAK,IAAI;AACtB,UAAQ,IAAI,MAAM,IAAI;AACtB,iBAAe;AACf,cAAY,IAAI;AAChB,SAAO,IAAI;AACX,eAAa;AACb,aAAW;AACX,eAAa;AACb,kBAAgB;AAChB,UAAQ;AACR,kBAAgB;AAChB,cAAY,IAAI,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI;AACjD,2BAAyB,IAAI;AAC7B,mBAAiB,IAAI;AACrB,aAAW,iBAAiB,MAAM,IAAI;AACtC;AAAA,IACE,aAAa,MAAM,IAAI;AAAA,IACvB,WAAW,MAAM,IAAI;AAAA,IACrB,UAAU,MAAM;AACpB;AAEA,CA3BC,aA2Ba;AACZ,gBAAc,IAAI;AAClB,cAAY,IAAI,aAAa,EAAE,EAAE,EAAE,EAAE,IAAI,IAAI;AAC/C;AAEA,CAhCC,aAgCa;AACZ,aAAW,MAAM;AACnB;AAEA,CApCC,aAoCa;AACZ,WAAS,IAAI,MAAM,IAAI;AACvB,kBAAgB;AAClB;AAEA,CAAC;AACC,SAAO;AACP,UAAQ;AACR,iBAAe;AACf,cAAY,IAAI;AAChB,cAAY,EAAE,EAAE,EAAE,IAAI,IAAI;AAC5B;AAEA,WA7Ba;AA8BX;AACE,aAAS;AACT,eAAW,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,MAAM;AAC1C;AACA;AACE,aAAS;AACT,eAAW,YAAY,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM;AACxC;AACF;AAEA,QAAO,wBAAyB;AAC9B,GA7DD;AA8DG,eAAW;AACb;AACF;AAQA,CAx6BC,QAw6BQ,CAAC,mBAAqB,CAAC;AAC9B,aAAW,YAAY,IAAI,oBAAoB,EAAE,OAAO,KAAK;AAC/D;AAEA,CA56BC,QA46BQ,CAAC,mBAAqB,CAAC;AAC9B,aAAW,aAAa,IAAI,mBAAmB,EAAE,OAAO,KAAK;AAC/D;AAEA,CAh7BC,QAg7BQ,CAAC,mBAAqB,CAAC;AAC9B,aAAW,aAAa,IAAI,oBAAoB,EAAE,OAAO,IAAI,gBAC3D;AACJ;AAEA,CAr7BC,QAq7BQ,CAAC,mBAAqB,CAAC;AAC9B,aAAW,cAAc,IAAI,mBAAmB,EAAE,OAAO,KAAK;AAChE;AAEA,CAz7BC,QAy7BQ,CAAC,mBAAqB,CAAC;AAC9B,aAAW,WAAW,IAAI,oBAAoB,EAAE,OAAO,IAAI,mBACzD;AACJ;AAEA,CA97BC,QA87BQ,CAAC,mBAAqB,CAAC;AAC9B,aAAW,YAAY,IAAI,mBAAmB,EAAE,OAAO,KAAK;AAC9D;AAEA,CAl8BC,QAk8BQ,CAAC,mBAAqB,CAAC;AAC9B,aAAW,YAAY,IAAI,oBAAoB,EAAE,OAAO,IAAI,gBAC1D;AACJ;AAEA,CAv8BC,QAu8BQ,CAAC,mBAAqB,CAAC;AAC9B,aAAW,aAAa,IAAI,mBAAmB,EAAE,OAAO,KAAK;AAC/D;AAEA,CA38BC,QA28BQ,CAAC,mBAAqB,CAAC;AAC9B,aAAW;AACb;AAEA,CA/8BC,QA+8BQ,CAAC,mBAAqB,CAAC;AAC9B,aAAW;AACb;AAEA,CAn9BC,QAm9BQ,CAAC,iBAAmB,CAruB5B;AAsuBC,aAAW;AACb;AAEA,WA9Ca;AA+CX;AACE,aAAS;AACX;AACA;AACE,aAAS;AACX;AACF;AAEA,WAnDa;AAoDX;AACE,aAAS;AACX;AACA;AACE,aAAS;AACX;AACF;AAEA,WAxDa;AAyDX;AACE,aAAS;AACT,eAAW,MAAM;AACnB;AACA;AACE,aAAS;AACT,eAAW,MAAM;AACnB;AACF;AAEA,WA9Da;AA+DX;AACE,aAAS;AACT,eAAW,MAAM;AACnB;AACA;AACE,aAAS;AACT,eAAW,MAAM;AACnB;AACF;AAEA,WArEa;AAsEX;AACE,aAAS;AACT,eAAW,MAAM;AACnB;AACA;AACE,aAAS;AACT,eAAW,MAAM;AACnB;AACA;AACE,eAAW,MAAM;AACnB;AACA;AACE,aAAS;AACT,eAAW,MAAM;AACnB;AACF;AAEA,WAlFa;AAmFX;AACE,aAAS;AACT,eAAW,MAAM;AACnB;AACA;AACE,aAAS;AACT,eAAW,MAAM;AACnB;AACA;AACE,aAAS;AACT,eAAW,MAAM;AACnB;AACF;AAEA,WA7Fa;AA8FX;AACE,aAAS;AACT,eAAW,YAAY,OAAO,QAAQ;AACxC;AACA;AACE,aAAS;AACT,eAAW,YAAY,OAAO,QAAQ;AACxC;AACF;AAEA,WAnGa;AAoGX;AACE,aAAS;AACT,eAAW,YAAY,OAAO,QAAQ;AACxC;AACA;AACE,aAAS;AACT,eAAW,YAAY,OAAO,QAAQ;AACxC;AACF;","names":[]}
package/dist/index.d.cts CHANGED
@@ -6,8 +6,16 @@ import { ReactNode, CSSProperties } from 'react';
6
6
  * icon and accessible live-region behaviour.
7
7
  */
8
8
  type SnackbarVariant = 'neutral' | 'success' | 'error' | 'warning' | 'info' | 'loading' | 'custom';
9
- /** `glass` is the frosted default; `solid` paints the accent as the surface. */
10
- type SnackbarTone = 'glass' | 'solid';
9
+ /**
10
+ * Surface preset for a snackbar.
11
+ *
12
+ * - `glass` — frosted translucent default; the page shows through.
13
+ * - `solid` — the variant accent painted as the surface.
14
+ * - `paper` — opaque, matte, hairline border, no blur. Light/dark aware.
15
+ * - `graphite` — dark matte charcoal with light text, in both themes.
16
+ * - `neon` — near-black with an accent glow ring, in both themes.
17
+ */
18
+ type SnackbarTone = 'glass' | 'solid' | 'paper' | 'graphite' | 'neon';
11
19
  /**
12
20
  * Density and width of a snackbar. `md` is the default; `xs` is a compact
13
21
  * mini style, `lg` is an editorial width for richer content.
package/dist/index.d.ts CHANGED
@@ -6,8 +6,16 @@ import { ReactNode, CSSProperties } from 'react';
6
6
  * icon and accessible live-region behaviour.
7
7
  */
8
8
  type SnackbarVariant = 'neutral' | 'success' | 'error' | 'warning' | 'info' | 'loading' | 'custom';
9
- /** `glass` is the frosted default; `solid` paints the accent as the surface. */
10
- type SnackbarTone = 'glass' | 'solid';
9
+ /**
10
+ * Surface preset for a snackbar.
11
+ *
12
+ * - `glass` — frosted translucent default; the page shows through.
13
+ * - `solid` — the variant accent painted as the surface.
14
+ * - `paper` — opaque, matte, hairline border, no blur. Light/dark aware.
15
+ * - `graphite` — dark matte charcoal with light text, in both themes.
16
+ * - `neon` — near-black with an accent glow ring, in both themes.
17
+ */
18
+ type SnackbarTone = 'glass' | 'solid' | 'paper' | 'graphite' | 'neon';
11
19
  /**
12
20
  * Density and width of a snackbar. `md` is the default; `xs` is a compact
13
21
  * mini style, `lg` is an editorial width for richer content.
package/dist/styles.css CHANGED
@@ -334,6 +334,10 @@
334
334
  min-width: 0;
335
335
  padding-top: 1px;
336
336
  }
337
+ .prs-item[data-layout=card] .prs-item__content[data-has-title=false] {
338
+ align-self: center;
339
+ padding-top: 0;
340
+ }
337
341
  .prs-item__title {
338
342
  color: var(--prs-fg);
339
343
  font-size: var(--prs-title-size);
@@ -541,6 +545,102 @@
541
545
  .prs-item[data-tone=solid] .prs-item__message a {
542
546
  color: #fff;
543
547
  }
548
+ .prs-item[data-tone=paper] .prs-item__surface {
549
+ --prs-blur: none;
550
+ --prs-inner: rgba(255, 255, 255, 0.9);
551
+ border-color: rgba(15, 23, 42, 0.09);
552
+ background: #ffffff;
553
+ box-shadow:
554
+ inset 0 1px 0 var(--prs-inner),
555
+ 0 1px 2px rgba(15, 23, 42, 0.06),
556
+ 0 14px 28px -22px rgba(15, 23, 42, 0.45);
557
+ }
558
+ @supports (color: light-dark(#000, #fff)) {
559
+ .prs-item[data-tone=paper] .prs-item__surface {
560
+ --prs-inner: light-dark( rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.05) );
561
+ border-color: light-dark(rgba(15, 23, 42, 0.09), rgba(255, 255, 255, 0.09));
562
+ background: light-dark(#ffffff, #191b23);
563
+ box-shadow:
564
+ inset 0 1px 0 var(--prs-inner),
565
+ 0 1px 2px light-dark(rgba(15, 23, 42, 0.05), rgba(0, 0, 0, 0.5)),
566
+ 0 14px 28px -22px light-dark(rgba(15, 23, 42, 0.4), rgba(0, 0, 0, 0.8));
567
+ }
568
+ }
569
+ .prs-item[data-tone=paper] .prs-item__surface::before {
570
+ opacity: 0.015;
571
+ }
572
+ .prs-item[data-tone=graphite] {
573
+ --prs-accent: var(--prs-accent-dark);
574
+ }
575
+ .prs-item[data-tone=graphite] .prs-item__surface {
576
+ --prs-fg: #f3f5fa;
577
+ --prs-muted: rgba(243, 245, 250, 0.74);
578
+ --prs-track: rgba(255, 255, 255, 0.12);
579
+ --prs-inner: rgba(255, 255, 255, 0.07);
580
+ --prs-blur: none;
581
+ border-color: rgba(255, 255, 255, 0.11);
582
+ background: #1f232c;
583
+ background:
584
+ radial-gradient(
585
+ 120% 150% at 0% 0%,
586
+ rgba(255, 255, 255, 0.06),
587
+ transparent 55%),
588
+ linear-gradient(
589
+ 180deg,
590
+ #2b303b,
591
+ #1b1f27);
592
+ box-shadow:
593
+ inset 0 1px 0 var(--prs-inner),
594
+ 0 1px 2px rgba(0, 0, 0, 0.45),
595
+ 0 18px 40px -26px rgba(0, 0, 0, 0.85);
596
+ }
597
+ .prs-item[data-tone=neon] {
598
+ --prs-accent: var(--prs-accent-dark);
599
+ }
600
+ .prs-item[data-tone=neon] .prs-item__surface {
601
+ --prs-fg: #f8fafc;
602
+ --prs-muted: rgba(248, 250, 252, 0.7);
603
+ --prs-track: rgba(255, 255, 255, 0.14);
604
+ --prs-inner: rgba(255, 255, 255, 0.05);
605
+ --prs-blur: none;
606
+ border-color: rgba(255, 255, 255, 0.14);
607
+ background: #080a11;
608
+ box-shadow:
609
+ inset 0 1px 0 var(--prs-inner),
610
+ 0 18px 40px -28px rgba(0, 0, 0, 0.9),
611
+ 0 0 30px -14px var(--prs-accent);
612
+ }
613
+ @supports (color: color-mix(in srgb, red, blue)) {
614
+ .prs-item[data-tone=neon] .prs-item__surface {
615
+ border-color: color-mix(in srgb, var(--prs-accent) 55%, transparent);
616
+ background:
617
+ radial-gradient(
618
+ 120% 160% at 0% 0%,
619
+ color-mix(in srgb, var(--prs-accent) 26%, transparent),
620
+ transparent 58%),
621
+ radial-gradient(
622
+ 120% 160% at 100% 100%,
623
+ color-mix(in srgb, var(--prs-accent) 12%, transparent),
624
+ transparent 62%),
625
+ #080a11;
626
+ box-shadow:
627
+ inset 0 1px 0 var(--prs-inner),
628
+ 0 0 0 1px color-mix(in srgb, var(--prs-accent) 22%, transparent),
629
+ 0 18px 40px -28px color-mix(in srgb, var(--prs-accent) 45%, transparent),
630
+ 0 0 32px -12px color-mix(in srgb, var(--prs-accent) 70%, transparent);
631
+ }
632
+ }
633
+ .prs-item[data-tone=graphite] .prs-item__surface::before,
634
+ .prs-item[data-tone=neon] .prs-item__surface::before {
635
+ opacity: 0.07;
636
+ }
637
+ @supports (color: color-mix(in srgb, red, blue)) {
638
+ .prs-item[data-tone=graphite],
639
+ .prs-item[data-tone=neon] {
640
+ --prs-accent-soft: color-mix(in srgb, var(--prs-accent) 26%, transparent);
641
+ --prs-accent-ring: color-mix(in srgb, var(--prs-accent) 42%, transparent);
642
+ }
643
+ }
544
644
  @keyframes prs-in {
545
645
  0% {
546
646
  opacity: 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-snackbar-glass",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "A glassmorphic snackbar system for React — queueing, promises, swipe-to-dismiss and first-class theming with zero runtime dependencies.",
5
5
  "keywords": [
6
6
  "react",