@24vlh/vds 0.1.10 → 0.2.1

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.
Files changed (53) hide show
  1. package/dist/components/action-bar.css +111 -0
  2. package/dist/components/action-bar.min.css +1 -0
  3. package/dist/components/authoring.css +262 -42
  4. package/dist/components/authoring.min.css +1 -1
  5. package/dist/components/avatar.css +229 -0
  6. package/dist/components/avatar.min.css +1 -0
  7. package/dist/components/badge-tag.css +235 -0
  8. package/dist/components/badge-tag.min.css +1 -0
  9. package/dist/components/buttons.css +90 -98
  10. package/dist/components/buttons.min.css +1 -1
  11. package/dist/components/command.css +846 -2
  12. package/dist/components/command.min.css +1 -1
  13. package/dist/components/content-blocks.css +328 -6
  14. package/dist/components/content-blocks.min.css +1 -1
  15. package/dist/components/description-list.css +117 -0
  16. package/dist/components/description-list.min.css +1 -0
  17. package/dist/components/flows.css +60 -47
  18. package/dist/components/flows.min.css +1 -1
  19. package/dist/components/header-footer.css +178 -18
  20. package/dist/components/header-footer.min.css +1 -1
  21. package/dist/components/hero.css +148 -14
  22. package/dist/components/hero.min.css +1 -1
  23. package/dist/components/icons.css +23 -11
  24. package/dist/components/icons.min.css +1 -1
  25. package/dist/components/inbox.css +5 -0
  26. package/dist/components/inbox.min.css +1 -1
  27. package/dist/components/navigation.css +67 -7
  28. package/dist/components/navigation.min.css +1 -1
  29. package/dist/components/overlays.css +121 -19
  30. package/dist/components/overlays.min.css +1 -1
  31. package/dist/components/progress.css +322 -0
  32. package/dist/components/progress.min.css +1 -0
  33. package/dist/components/skeleton.css +22 -3
  34. package/dist/components/skeleton.min.css +1 -1
  35. package/dist/components/state.css +172 -0
  36. package/dist/components/state.min.css +1 -0
  37. package/dist/components/tables.css +93 -15
  38. package/dist/components/tables.min.css +1 -1
  39. package/dist/components/tabs.css +116 -4
  40. package/dist/components/tabs.min.css +1 -1
  41. package/dist/components/toasts.css +115 -41
  42. package/dist/components/toasts.min.css +1 -1
  43. package/dist/components/tooltips-popovers.css +135 -93
  44. package/dist/components/tooltips-popovers.min.css +1 -1
  45. package/dist/components/utilities.css +37 -3
  46. package/dist/components/utilities.min.css +1 -1
  47. package/dist/core.css +43 -21
  48. package/dist/core.min.css +1 -1
  49. package/dist/identity.css +107 -1
  50. package/dist/identity.min.css +1 -1
  51. package/dist/vds.css +5432 -1775
  52. package/dist/vds.min.css +1 -1
  53. package/package.json +1 -1
@@ -22,7 +22,13 @@
22
22
  [data-vds-toast],
23
23
  .vds-toast {
24
24
  --toast-duration: 5000ms;
25
+ --toast-stack-width: 20rem;
26
+ --toast-stack-gap: var(--space-2);
25
27
  --toast-feedback-padding-md: var(--space-4);
28
+ --toast-padding: var(--toast-feedback-padding-md);
29
+ --toast-padding-compact: var(--space-3);
30
+ --toast-progress-track: color-mix(in srgb, currentColor 20%, transparent);
31
+ --toast-progress-fill: currentColor;
26
32
  }
27
33
 
28
34
  /* ---------------------------------------------------------
@@ -38,10 +44,10 @@
38
44
  z-index: var(--z-toast);
39
45
  display: flex;
40
46
  flex-direction: column;
41
- gap: var(--space-2);
47
+ gap: var(--toast-stack-gap);
42
48
  pointer-events: none;
43
49
  align-items: stretch;
44
- width: 20rem;
50
+ width: var(--toast-stack-width);
45
51
  max-width: 100%;
46
52
  }
47
53
 
@@ -127,6 +133,11 @@
127
133
  --------------------------------------------------------- */
128
134
 
129
135
  .toast {
136
+ --toast-bg: var(--color-surface);
137
+ --toast-border: var(--color-border-subtle);
138
+ --toast-accent: var(--toast-border);
139
+ --toast-text: var(--color-text);
140
+
130
141
  pointer-events: auto;
131
142
  display: grid;
132
143
  grid-template-columns: auto 1fr auto;
@@ -140,11 +151,11 @@
140
151
  grid-row-gap: var(--space-1);
141
152
  row-gap: var(--space-1);
142
153
 
143
- padding: var(--toast-feedback-padding-md);
154
+ padding: var(--toast-padding);
144
155
  border-radius: var(--radius-md);
145
- border: var(--border-width) solid var(--color-border-subtle);
146
- background-color: var(--color-surface);
147
- color: var(--color-text);
156
+ border: var(--border-width) solid var(--toast-border);
157
+ background-color: var(--toast-bg);
158
+ color: var(--toast-text);
148
159
  box-shadow: var(--shadow-md);
149
160
 
150
161
  font-size: var(--text-sm);
@@ -184,9 +195,9 @@
184
195
  }
185
196
 
186
197
  .toast__close {
187
- position: absolute;
188
- top: var(--space-2);
189
- right: var(--space-2);
198
+ grid-area: close;
199
+ justify-self: end;
200
+ align-self: start;
190
201
 
191
202
  -webkit-appearance: none;
192
203
 
@@ -230,7 +241,7 @@
230
241
  margin-top: var(--space-1);
231
242
  height: 2px;
232
243
  border-radius: var(--radius-full);
233
- background-color: rgba(0, 0, 0, 0.08);
244
+ background-color: var(--toast-progress-track);
234
245
  overflow: hidden;
235
246
  }
236
247
 
@@ -243,11 +254,12 @@
243
254
  left: 0;
244
255
  transform-origin: left center;
245
256
  transform: scaleX(1);
246
- background-color: currentColor;
257
+ background-color: var(--toast-progress-fill);
247
258
  animation: toast-progress var(--toast-duration) linear forwards;
248
259
  }
249
260
 
250
261
  .toast--compact {
262
+ --toast-padding: var(--toast-padding-compact);
251
263
  grid-template-rows: auto;
252
264
  grid-template-areas: "icon body close";
253
265
  }
@@ -265,6 +277,87 @@
265
277
  display: none;
266
278
  }
267
279
 
280
+ /* Optional layout helpers */
281
+
282
+ .toast--no-progress {
283
+ grid-template-rows: auto;
284
+ grid-template-areas: "icon body close";
285
+ }
286
+
287
+ .toast--no-progress .toast__progress {
288
+ display: none;
289
+ }
290
+
291
+ .toast--no-icon {
292
+ grid-template-columns: 1fr auto;
293
+ grid-template-areas:
294
+ "body close"
295
+ "progress progress";
296
+ }
297
+
298
+ .toast--no-icon .toast__icon {
299
+ display: none;
300
+ }
301
+
302
+ .toast--no-close {
303
+ grid-template-columns: auto 1fr;
304
+ grid-template-areas:
305
+ "icon body"
306
+ "progress progress";
307
+ }
308
+
309
+ .toast--no-close .toast__close {
310
+ display: none;
311
+ }
312
+
313
+ .toast--no-icon.toast--no-close {
314
+ grid-template-columns: 1fr;
315
+ grid-template-areas:
316
+ "body"
317
+ "progress";
318
+ }
319
+
320
+ .toast--no-progress.toast--no-icon {
321
+ grid-template-columns: 1fr auto;
322
+ grid-template-areas: "body close";
323
+ }
324
+
325
+ .toast--no-progress.toast--no-close {
326
+ grid-template-columns: auto 1fr;
327
+ grid-template-areas: "icon body";
328
+ }
329
+
330
+ .toast--no-progress.toast--no-icon.toast--no-close {
331
+ grid-template-columns: 1fr;
332
+ grid-template-areas: "body";
333
+ }
334
+
335
+ .toast--compact.toast--no-icon {
336
+ grid-template-columns: 1fr auto;
337
+ grid-template-rows: auto;
338
+ grid-template-areas: "body close";
339
+ }
340
+
341
+ .toast--compact.toast--no-close {
342
+ grid-template-columns: auto 1fr;
343
+ grid-template-rows: auto;
344
+ grid-template-areas: "icon body";
345
+ }
346
+
347
+ .toast--compact.toast--no-icon.toast--no-close {
348
+ grid-template-columns: 1fr;
349
+ grid-template-rows: auto;
350
+ grid-template-areas: "body";
351
+ }
352
+
353
+ .toast__actions {
354
+ display: flex;
355
+ flex-wrap: wrap;
356
+ gap: var(--space-2);
357
+ margin-top: var(--space-2);
358
+ align-items: center;
359
+ }
360
+
268
361
  /* ---------------------------------------------------------
269
362
  4. INLINE VARIANT (NON-FLOATING)
270
363
  Usage:
@@ -277,6 +370,9 @@
277
370
  width: 100%;
278
371
  margin-top: var(--space-2);
279
372
  margin-bottom: var(--space-2);
373
+ opacity: 1;
374
+ transform: none;
375
+ animation: none;
280
376
  }
281
377
 
282
378
  .toast--inline .toast__progress {
@@ -288,33 +384,33 @@
288
384
  --------------------------------------------------------- */
289
385
 
290
386
  .toast--neutral {
291
- border-color: var(--color-muted-border);
292
- background-color: var(--color-muted-bg);
293
- color: var(--color-text);
387
+ --toast-bg: var(--color-muted-bg);
388
+ --toast-border: var(--color-muted-border);
389
+ --toast-text: var(--color-text);
294
390
  }
295
391
 
296
392
  .toast--info {
297
393
  --toast-bg: var(--semantic-info-bg-strong, var(--color-info-soft));
298
- --toast-border: var(--semantic-info-border-strong, var(--color-info));
394
+ --toast-accent: var(--semantic-info-border-strong, var(--color-info));
299
395
  --toast-text: var(--semantic-info-text-strong, var(--color-info-strong));
300
396
  }
301
397
 
302
398
  .toast--success {
303
399
  --toast-bg: var(--semantic-success-bg-strong, var(--color-success-soft));
304
- --toast-border: var(--semantic-success-border-strong, var(--color-success));
400
+ --toast-accent: var(--semantic-success-border-strong, var(--color-success));
305
401
  --toast-text: var(--semantic-success-text-strong, var(--color-success-strong));
306
402
  }
307
403
 
308
404
  .toast--warning {
309
405
  --toast-bg: var(--semantic-warning-bg-strong, var(--color-warning-soft));
310
- --toast-border: var(--semantic-warning-border-strong, var(--color-warning));
406
+ --toast-accent: var(--semantic-warning-border-strong, var(--color-warning));
311
407
  --toast-text: var(--semantic-warning-text-strong, var(--color-warning-strong));
312
408
  }
313
409
 
314
410
  .toast--danger,
315
411
  .toast--error {
316
412
  --toast-bg: var(--semantic-error-bg-strong, var(--color-danger-soft));
317
- --toast-border: var(--semantic-error-border-strong, var(--color-danger));
413
+ --toast-accent: var(--semantic-error-border-strong, var(--color-danger));
318
414
  --toast-text: var(--semantic-error-text-strong, var(--color-danger-strong));
319
415
  }
320
416
 
@@ -325,7 +421,7 @@
325
421
  .toast--error {
326
422
  background-color: var(--toast-bg);
327
423
  color: var(--toast-text);
328
- border-left: var(--border-width-strong) solid var(--toast-border);
424
+ border-left: var(--border-width-strong) solid var(--toast-accent);
329
425
  }
330
426
 
331
427
  .toast--info .toast__message,
@@ -376,28 +472,6 @@
376
472
  }
377
473
  }
378
474
 
379
- @keyframes toast-slide-in {
380
- from {
381
- opacity: 0;
382
- transform: translateY(8px);
383
- }
384
- to {
385
- opacity: 1;
386
- transform: translateY(0);
387
- }
388
- }
389
-
390
- @keyframes toast-slide-out {
391
- from {
392
- opacity: 1;
393
- transform: translateY(0);
394
- }
395
- to {
396
- opacity: 0;
397
- transform: translateY(6px);
398
- }
399
- }
400
-
401
475
  /* ---------------------------------------------------------
402
476
  7. REDUCED MOTION FALLBACKS
403
477
  --------------------------------------------------------- */
@@ -1 +1 @@
1
- .vds-toast,[data-vds-toast]{--toast-duration:5000ms;--toast-feedback-padding-md:var(--space-4)}.toast-stack{align-items:stretch;display:flex;flex-direction:column;gap:var(--space-2);max-width:100%;pointer-events:none;position:fixed;width:20rem;z-index:var(--z-toast)}.toast-stack .toast{width:100%}.toast-stack--top-right{align-items:flex-end;right:var(--space-4);top:var(--space-4)}.toast-stack--top-left{align-items:flex-start;left:var(--space-4);top:var(--space-4)}.toast-stack--bottom-right{align-items:flex-end;bottom:var(--space-4);right:var(--space-4)}.toast-stack--bottom-left{align-items:flex-start;bottom:var(--space-4);left:var(--space-4)}.toast-stack--top-center{top:var(--space-4)}.toast-stack--bottom-center,.toast-stack--top-center{align-items:center;left:50%;transform:translateX(-50%)}.toast-stack--bottom-center{bottom:var(--space-4)}@media (max-width:640px){.toast-stack{left:var(--space-2);max-width:none;right:var(--space-2)}.toast-stack--top-center,.toast-stack--top-left,.toast-stack--top-right{align-items:stretch;bottom:var(--space-2);top:auto;transform:none}.toast-stack--bottom-center,.toast-stack--bottom-left,.toast-stack--bottom-right{align-items:stretch;bottom:var(--space-2);transform:none}}.toast{grid-column-gap:var(--space-3);grid-row-gap:var(--space-1);background-color:var(--color-surface);border:var(--border-width) solid var(--color-border-subtle);border-radius:var(--radius-md);box-shadow:var(--shadow-md);color:var(--color-text);-moz-column-gap:var(--space-3);column-gap:var(--space-3);display:grid;font-size:var(--text-sm);grid-template-areas:"icon body close" "progress progress progress";grid-template-columns:auto 1fr auto;grid-template-rows:auto auto;line-height:var(--line-height-normal);opacity:0;padding:var(--toast-feedback-padding-md);pointer-events:auto;position:relative;row-gap:var(--space-1);transform:translateY(8px)}.toast__icon{align-items:center;display:flex;flex-shrink:0;grid-area:icon;height:var(--icon-sm);justify-content:center;margin-top:0;width:var(--icon-sm)}.toast__body{display:flex;flex-direction:column;gap:var(--space-1);grid-area:body;min-width:0}.toast__title{font-weight:var(--font-weight-semibold)}.toast__message{color:var(--color-text-muted);font-size:var(--text-xs)}.toast__close{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:none;color:var(--color-text-soft);cursor:pointer;display:inline-flex;justify-content:center;line-height:0;padding:var(--space-1);position:absolute;right:var(--space-2);top:var(--space-2)}.toast__close:hover{color:var(--color-text)}.toast__close:focus-visible{box-shadow:0 0 0 var(--focus-ring-width) var(--focus-ring-color);outline:none}.toast--in{animation:toast-slide-in .18s ease-out forwards;animation:toast-slide-in .18s var(--ease-out,ease-out) forwards}.toast--out{animation:toast-slide-out .15s ease-in forwards;animation:toast-slide-out .15s var(--ease-in,ease-in) forwards}.toast__progress{background-color:rgba(0,0,0,.08);border-radius:var(--radius-full);grid-area:progress;height:2px;margin-top:var(--space-1);overflow:hidden;position:relative}.toast__progress:before{animation:toast-progress var(--toast-duration) linear forwards;background-color:currentColor;bottom:0;content:"";left:0;position:absolute;right:0;top:0;transform:scaleX(1);transform-origin:left center}.toast--compact{grid-template-areas:"icon body close";grid-template-rows:auto}.toast--compact .toast__message{color:inherit;font-size:var(--text-sm)}.toast--compact .toast__progress,.toast--compact .toast__title{display:none}.toast--inline{box-shadow:none;margin-bottom:var(--space-2);margin-top:var(--space-2);position:static;width:100%}.toast--inline .toast__progress{display:none}.toast--neutral{background-color:var(--color-muted-bg);border-color:var(--color-muted-border);color:var(--color-text)}.toast--info{--toast-bg:var(--semantic-info-bg-strong,var(--color-info-soft));--toast-border:var(--semantic-info-border-strong,var(--color-info));--toast-text:var(--semantic-info-text-strong,var(--color-info-strong))}.toast--success{--toast-bg:var(--semantic-success-bg-strong,var(--color-success-soft));--toast-border:var(--semantic-success-border-strong,var(--color-success));--toast-text:var(--semantic-success-text-strong,var(--color-success-strong))}.toast--warning{--toast-bg:var(--semantic-warning-bg-strong,var(--color-warning-soft));--toast-border:var(--semantic-warning-border-strong,var(--color-warning));--toast-text:var(--semantic-warning-text-strong,var(--color-warning-strong))}.toast--danger,.toast--error{--toast-bg:var(--semantic-error-bg-strong,var(--color-danger-soft));--toast-border:var(--semantic-error-border-strong,var(--color-danger));--toast-text:var(--semantic-error-text-strong,var(--color-danger-strong))}.toast--danger,.toast--error,.toast--info,.toast--success,.toast--warning{background-color:var(--toast-bg);border-left:var(--border-width-strong) solid var(--toast-border);color:var(--toast-text)}.toast--danger .toast__message,.toast--error .toast__message,.toast--info .toast__message,.toast--neutral .toast__message,.toast--success .toast__message,.toast--warning .toast__message{color:inherit}.toast--exiting{animation:toast-slide-out var(--transition-fast) var(--ease-in) forwards}@keyframes toast-progress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@keyframes toast-slide-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes toast-slide-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(6px)}}@media (prefers-reduced-motion:reduce){.toast{animation:none;opacity:1;transform:none;transition:none}.toast--exiting{animation:none;opacity:0}.toast__progress:before{animation-duration:var(--motion-none)}}
1
+ .vds-toast,[data-vds-toast]{--toast-duration:5000ms;--toast-stack-width:20rem;--toast-stack-gap:var(--space-2);--toast-feedback-padding-md:var(--space-4);--toast-padding:var(--toast-feedback-padding-md);--toast-padding-compact:var(--space-3);--toast-progress-track:color-mix(in srgb,currentColor 20%,transparent);--toast-progress-fill:currentColor}.toast-stack{align-items:stretch;display:flex;flex-direction:column;gap:var(--toast-stack-gap);max-width:100%;pointer-events:none;position:fixed;width:var(--toast-stack-width);z-index:var(--z-toast)}.toast-stack .toast{width:100%}.toast-stack--top-right{align-items:flex-end;right:var(--space-4);top:var(--space-4)}.toast-stack--top-left{align-items:flex-start;left:var(--space-4);top:var(--space-4)}.toast-stack--bottom-right{align-items:flex-end;bottom:var(--space-4);right:var(--space-4)}.toast-stack--bottom-left{align-items:flex-start;bottom:var(--space-4);left:var(--space-4)}.toast-stack--top-center{top:var(--space-4)}.toast-stack--bottom-center,.toast-stack--top-center{align-items:center;left:50%;transform:translateX(-50%)}.toast-stack--bottom-center{bottom:var(--space-4)}@media (max-width:640px){.toast-stack{left:var(--space-2);max-width:none;right:var(--space-2)}.toast-stack--top-center,.toast-stack--top-left,.toast-stack--top-right{align-items:stretch;bottom:var(--space-2);top:auto;transform:none}.toast-stack--bottom-center,.toast-stack--bottom-left,.toast-stack--bottom-right{align-items:stretch;bottom:var(--space-2);transform:none}}.toast{--toast-bg:var(--color-surface);--toast-border:var(--color-border-subtle);--toast-accent:var(--toast-border);--toast-text:var(--color-text);grid-column-gap:var(--space-3);grid-row-gap:var(--space-1);background-color:var(--toast-bg);border:var(--border-width) solid var(--toast-border);border-radius:var(--radius-md);box-shadow:var(--shadow-md);color:var(--toast-text);-moz-column-gap:var(--space-3);column-gap:var(--space-3);display:grid;font-size:var(--text-sm);grid-template-areas:"icon body close" "progress progress progress";grid-template-columns:auto 1fr auto;grid-template-rows:auto auto;line-height:var(--line-height-normal);opacity:0;padding:var(--toast-padding);pointer-events:auto;position:relative;row-gap:var(--space-1);transform:translateY(8px)}.toast__icon{align-items:center;display:flex;flex-shrink:0;grid-area:icon;height:var(--icon-sm);justify-content:center;margin-top:0;width:var(--icon-sm)}.toast__body{display:flex;flex-direction:column;gap:var(--space-1);grid-area:body;min-width:0}.toast__title{font-weight:var(--font-weight-semibold)}.toast__message{color:var(--color-text-muted);font-size:var(--text-xs)}.toast__close{align-items:center;align-self:start;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:none;color:var(--color-text-soft);cursor:pointer;display:inline-flex;grid-area:close;justify-content:center;justify-self:end;line-height:0;padding:var(--space-1)}.toast__close:hover{color:var(--color-text)}.toast__close:focus-visible{box-shadow:0 0 0 var(--focus-ring-width) var(--focus-ring-color);outline:none}.toast--in{animation:toast-slide-in .18s ease-out forwards;animation:toast-slide-in .18s var(--ease-out,ease-out) forwards}.toast--out{animation:toast-slide-out .15s ease-in forwards;animation:toast-slide-out .15s var(--ease-in,ease-in) forwards}.toast__progress{background-color:var(--toast-progress-track);border-radius:var(--radius-full);grid-area:progress;height:2px;margin-top:var(--space-1);overflow:hidden;position:relative}.toast__progress:before{animation:toast-progress var(--toast-duration) linear forwards;background-color:var(--toast-progress-fill);bottom:0;content:"";left:0;position:absolute;right:0;top:0;transform:scaleX(1);transform-origin:left center}.toast--compact{--toast-padding:var(--toast-padding-compact);grid-template-areas:"icon body close";grid-template-rows:auto}.toast--compact .toast__message{color:inherit;font-size:var(--text-sm)}.toast--compact .toast__progress,.toast--compact .toast__title{display:none}.toast--no-progress{grid-template-areas:"icon body close";grid-template-rows:auto}.toast--no-progress .toast__progress{display:none}.toast--no-icon{grid-template-areas:"body close" "progress progress";grid-template-columns:1fr auto}.toast--no-icon .toast__icon{display:none}.toast--no-close{grid-template-areas:"icon body" "progress progress";grid-template-columns:auto 1fr}.toast--no-close .toast__close{display:none}.toast--no-icon.toast--no-close{grid-template-areas:"body" "progress";grid-template-columns:1fr}.toast--no-progress.toast--no-icon{grid-template-areas:"body close";grid-template-columns:1fr auto}.toast--no-progress.toast--no-close{grid-template-areas:"icon body";grid-template-columns:auto 1fr}.toast--no-progress.toast--no-icon.toast--no-close{grid-template-areas:"body";grid-template-columns:1fr}.toast--compact.toast--no-icon{grid-template-areas:"body close";grid-template-columns:1fr auto;grid-template-rows:auto}.toast--compact.toast--no-close{grid-template-areas:"icon body";grid-template-columns:auto 1fr;grid-template-rows:auto}.toast--compact.toast--no-icon.toast--no-close{grid-template-areas:"body";grid-template-columns:1fr;grid-template-rows:auto}.toast__actions{align-items:center;display:flex;flex-wrap:wrap;gap:var(--space-2);margin-top:var(--space-2)}.toast--inline{animation:none;box-shadow:none;margin-bottom:var(--space-2);margin-top:var(--space-2);opacity:1;position:static;transform:none;width:100%}.toast--inline .toast__progress{display:none}.toast--neutral{--toast-bg:var(--color-muted-bg);--toast-border:var(--color-muted-border);--toast-text:var(--color-text)}.toast--info{--toast-bg:var(--semantic-info-bg-strong,var(--color-info-soft));--toast-accent:var(--semantic-info-border-strong,var(--color-info));--toast-text:var(--semantic-info-text-strong,var(--color-info-strong))}.toast--success{--toast-bg:var(--semantic-success-bg-strong,var(--color-success-soft));--toast-accent:var(--semantic-success-border-strong,var(--color-success));--toast-text:var(--semantic-success-text-strong,var(--color-success-strong))}.toast--warning{--toast-bg:var(--semantic-warning-bg-strong,var(--color-warning-soft));--toast-accent:var(--semantic-warning-border-strong,var(--color-warning));--toast-text:var(--semantic-warning-text-strong,var(--color-warning-strong))}.toast--danger,.toast--error{--toast-bg:var(--semantic-error-bg-strong,var(--color-danger-soft));--toast-accent:var(--semantic-error-border-strong,var(--color-danger));--toast-text:var(--semantic-error-text-strong,var(--color-danger-strong))}.toast--danger,.toast--error,.toast--info,.toast--success,.toast--warning{background-color:var(--toast-bg);border-left:var(--border-width-strong) solid var(--toast-accent);color:var(--toast-text)}.toast--danger .toast__message,.toast--error .toast__message,.toast--info .toast__message,.toast--neutral .toast__message,.toast--success .toast__message,.toast--warning .toast__message{color:inherit}.toast--exiting{animation:toast-slide-out var(--transition-fast) var(--ease-in) forwards}@keyframes toast-slide-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes toast-slide-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(6px)}}@keyframes toast-progress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@media (prefers-reduced-motion:reduce){.toast{animation:none;opacity:1;transform:none;transition:none}.toast--exiting{animation:none;opacity:0}.toast__progress:before{animation-duration:var(--motion-none)}}
@@ -31,16 +31,27 @@
31
31
  --------------------------------------------------------- */
32
32
 
33
33
  .tooltip {
34
+ --tooltip-offset: var(--space-2);
35
+ --tooltip-motion: 0.25rem;
36
+ --tooltip-max-width: 24rem;
37
+ --tooltip-arrow-size: var(--space-3);
38
+ --tooltip-arrow-inset: var(--space-4);
39
+ --tooltip-bg: var(--color-surface);
40
+ --tooltip-border: var(--color-border-subtle);
41
+ --tooltip-text: var(--color-text);
42
+
34
43
  position: absolute;
35
44
  z-index: var(--z-tooltip);
36
45
 
37
46
  max-width: 24rem;
47
+
48
+ max-width: var(--tooltip-max-width);
38
49
  padding: var(--space-2) var(--space-3);
39
50
 
40
- background-color: var(--color-surface);
41
- color: var(--color-text);
51
+ background-color: var(--tooltip-bg);
52
+ color: var(--tooltip-text);
42
53
  border-radius: var(--radius-sm);
43
- border: 1px solid var(--color-border-subtle);
54
+ border: 1px solid var(--tooltip-border);
44
55
  box-shadow: var(--shadow-2);
45
56
 
46
57
  font-size: var(--text-xs);
@@ -48,7 +59,6 @@
48
59
  white-space: normal;
49
60
 
50
61
  opacity: 0;
51
- transform: translateY(0.25rem);
52
62
  pointer-events: none;
53
63
 
54
64
  transition: opacity var(--transition-fast) var(--ease-out), transform var(--transition-fast) var(--ease-out);
@@ -57,8 +67,7 @@
57
67
  .tooltip--visible,
58
68
  .tooltip[data-state="open"] {
59
69
  opacity: 1;
60
- transform: translateY(0);
61
- pointer-events: auto;
70
+ --tooltip-motion: 0rem;
62
71
  }
63
72
 
64
73
  /* ---------------------------------------------------------
@@ -68,45 +77,49 @@
68
77
  .tooltip--top {
69
78
  bottom: 100%;
70
79
  left: 50%;
71
- transform: translate(-50%, -0.25rem);
72
- }
73
-
74
- .tooltip--top.tooltip--visible,
75
- .tooltip--top[data-state="open"] {
76
- transform: translate(-50%, 0);
80
+ transform: translate(-50%, calc(-1 * var(--tooltip-offset) - var(--tooltip-motion)));
77
81
  }
78
82
 
79
83
  .tooltip--bottom {
80
84
  top: 100%;
81
85
  left: 50%;
82
- transform: translate(-50%, 0.25rem);
83
- }
84
-
85
- .tooltip--bottom.tooltip--visible,
86
- .tooltip--bottom[data-state="open"] {
87
- transform: translate(-50%, 0);
86
+ transform: translate(-50%, calc(var(--tooltip-offset) + var(--tooltip-motion)));
88
87
  }
89
88
 
90
89
  .tooltip--left {
91
90
  right: 100%;
92
91
  top: 50%;
93
- transform: translate(-0.25rem, -50%);
94
- }
95
-
96
- .tooltip--left.tooltip--visible,
97
- .tooltip--left[data-state="open"] {
98
- transform: translate(0, -50%);
92
+ transform: translate(calc(-1 * var(--tooltip-offset) - var(--tooltip-motion)), -50%);
99
93
  }
100
94
 
101
95
  .tooltip--right {
102
96
  left: 100%;
103
97
  top: 50%;
104
- transform: translate(0.25rem, -50%);
98
+ transform: translate(calc(var(--tooltip-offset) + var(--tooltip-motion)), -50%);
99
+ }
100
+
101
+ .tooltip--top-left {
102
+ bottom: 100%;
103
+ left: 0;
104
+ transform: translate(0, calc(-1 * var(--tooltip-offset) - var(--tooltip-motion)));
105
+ }
106
+
107
+ .tooltip--top-right {
108
+ bottom: 100%;
109
+ right: 0;
110
+ transform: translate(0, calc(-1 * var(--tooltip-offset) - var(--tooltip-motion)));
111
+ }
112
+
113
+ .tooltip--bottom-left {
114
+ top: 100%;
115
+ left: 0;
116
+ transform: translate(0, calc(var(--tooltip-offset) + var(--tooltip-motion)));
105
117
  }
106
118
 
107
- .tooltip--right.tooltip--visible,
108
- .tooltip--right[data-state="open"] {
109
- transform: translate(0, -50%);
119
+ .tooltip--bottom-right {
120
+ top: 100%;
121
+ right: 0;
122
+ transform: translate(0, calc(var(--tooltip-offset) + var(--tooltip-motion)));
110
123
  }
111
124
 
112
125
  /* ---------------------------------------------------------
@@ -115,8 +128,8 @@
115
128
 
116
129
  .tooltip__arrow {
117
130
  position: absolute;
118
- width: var(--space-3);
119
- height: var(--space-3);
131
+ width: var(--tooltip-arrow-size);
132
+ height: var(--tooltip-arrow-size);
120
133
 
121
134
  background-color: inherit;
122
135
  border: inherit;
@@ -132,12 +145,36 @@
132
145
  transform: translate(-50%, -50%) rotate(45deg);
133
146
  }
134
147
 
148
+ .tooltip--top-left .tooltip__arrow {
149
+ top: 100%;
150
+ left: var(--tooltip-arrow-inset);
151
+ transform: translate(0, -50%) rotate(45deg);
152
+ }
153
+
154
+ .tooltip--top-right .tooltip__arrow {
155
+ top: 100%;
156
+ right: var(--tooltip-arrow-inset);
157
+ transform: translate(0, -50%) rotate(45deg);
158
+ }
159
+
135
160
  .tooltip--bottom .tooltip__arrow {
136
161
  bottom: 100%;
137
162
  left: 50%;
138
163
  transform: translate(-50%, 50%) rotate(45deg);
139
164
  }
140
165
 
166
+ .tooltip--bottom-left .tooltip__arrow {
167
+ bottom: 100%;
168
+ left: var(--tooltip-arrow-inset);
169
+ transform: translate(0, 50%) rotate(45deg);
170
+ }
171
+
172
+ .tooltip--bottom-right .tooltip__arrow {
173
+ bottom: 100%;
174
+ right: var(--tooltip-arrow-inset);
175
+ transform: translate(0, 50%) rotate(45deg);
176
+ }
177
+
141
178
  .tooltip--left .tooltip__arrow {
142
179
  left: 100%;
143
180
  top: 50%;
@@ -150,6 +187,15 @@
150
187
  transform: translate(-50%, -50%) rotate(45deg);
151
188
  }
152
189
 
190
+ .tooltip--no-arrow .tooltip__arrow {
191
+ display: none;
192
+ }
193
+
194
+ .tooltip--interactive.tooltip--visible,
195
+ .tooltip--interactive[data-state="open"] {
196
+ pointer-events: auto;
197
+ }
198
+
153
199
  /* ---------------------------------------------------------
154
200
  5. TOOLTIP DENSITY
155
201
  --------------------------------------------------------- */
@@ -206,23 +252,35 @@
206
252
  --------------------------------------------------------- */
207
253
 
208
254
  .popover {
255
+ --popover-offset: var(--space-2);
256
+ --popover-motion: 0.25rem;
257
+ --popover-min-width: 12rem;
258
+ --popover-max-width: 28rem;
259
+ --popover-arrow-size: var(--space-3);
260
+ --popover-arrow-inset: var(--space-6);
261
+ --popover-bg: var(--color-surface);
262
+ --popover-border: var(--color-border-subtle);
263
+ --popover-text: var(--color-text);
264
+
209
265
  position: absolute;
210
266
  z-index: var(--z-tooltip);
211
267
 
212
268
  min-width: 12rem;
269
+
270
+ min-width: var(--popover-min-width);
213
271
  max-width: 28rem;
272
+ max-width: var(--popover-max-width);
214
273
 
215
- background-color: var(--color-surface);
216
- color: var(--color-text);
274
+ background-color: var(--popover-bg);
275
+ color: var(--popover-text);
217
276
  border-radius: var(--radius-md);
218
- border: 1px solid var(--color-border-subtle);
277
+ border: 1px solid var(--popover-border);
219
278
  box-shadow: var(--shadow-3);
220
279
 
221
280
  display: flex;
222
281
  flex-direction: column;
223
282
 
224
283
  opacity: 0;
225
- transform: translateY(0.25rem);
226
284
  pointer-events: none;
227
285
 
228
286
  transition: opacity var(--transition-fast) var(--ease-out), transform var(--transition-fast) var(--ease-out);
@@ -231,8 +289,8 @@
231
289
  .popover--open,
232
290
  .popover[data-state="open"] {
233
291
  opacity: 1;
234
- transform: translateY(0);
235
292
  pointer-events: auto;
293
+ --popover-motion: 0rem;
236
294
  }
237
295
 
238
296
  /* ---------------------------------------------------------
@@ -242,89 +300,49 @@
242
300
  .popover--top {
243
301
  bottom: 100%;
244
302
  left: 50%;
245
- transform: translate(-50%, -0.25rem);
246
- }
247
-
248
- .popover--top.popover--open,
249
- .popover--top[data-state="open"] {
250
- transform: translate(-50%, 0);
303
+ transform: translate(-50%, calc(-1 * var(--popover-offset) - var(--popover-motion)));
251
304
  }
252
305
 
253
306
  .popover--bottom {
254
307
  top: 100%;
255
308
  left: 50%;
256
- transform: translate(-50%, 0.25rem);
257
- }
258
-
259
- .popover--bottom.popover--open,
260
- .popover--bottom[data-state="open"] {
261
- transform: translate(-50%, 0);
309
+ transform: translate(-50%, calc(var(--popover-offset) + var(--popover-motion)));
262
310
  }
263
311
 
264
312
  .popover--left {
265
313
  right: 100%;
266
314
  top: 50%;
267
- transform: translate(-0.25rem, -50%);
268
- }
269
-
270
- .popover--left.popover--open,
271
- .popover--left[data-state="open"] {
272
- transform: translate(0, -50%);
315
+ transform: translate(calc(-1 * var(--popover-offset) - var(--popover-motion)), -50%);
273
316
  }
274
317
 
275
318
  .popover--right {
276
319
  left: 100%;
277
320
  top: 50%;
278
- transform: translate(0.25rem, -50%);
279
- }
280
-
281
- .popover--right.popover--open,
282
- .popover--right[data-state="open"] {
283
- transform: translate(0, -50%);
321
+ transform: translate(calc(var(--popover-offset) + var(--popover-motion)), -50%);
284
322
  }
285
323
 
286
324
  .popover--bottom-right {
287
325
  top: 100%;
288
326
  right: 0;
289
- transform: translateY(0.25rem);
290
- }
291
-
292
- .popover--bottom-right.popover--open,
293
- .popover--bottom-right[data-state="open"] {
294
- transform: translateY(0);
327
+ transform: translate(0, calc(var(--popover-offset) + var(--popover-motion)));
295
328
  }
296
329
 
297
330
  .popover--bottom-left {
298
331
  top: 100%;
299
332
  left: 0;
300
- transform: translateY(0.25rem);
301
- }
302
-
303
- .popover--bottom-left.popover--open,
304
- .popover--bottom-left[data-state="open"] {
305
- transform: translateY(0);
333
+ transform: translate(0, calc(var(--popover-offset) + var(--popover-motion)));
306
334
  }
307
335
 
308
336
  .popover--top-right {
309
337
  bottom: 100%;
310
338
  right: 0;
311
- transform: translateY(-0.25rem);
312
- }
313
-
314
- .popover--top-right.popover--open,
315
- .popover--top-right[data-state="open"] {
316
- transform: translateY(0);
339
+ transform: translate(0, calc(-1 * var(--popover-offset) - var(--popover-motion)));
317
340
  }
318
341
 
319
342
  .popover--top-left {
320
343
  bottom: 100%;
321
344
  left: 0;
322
- transform: translateY(-0.25rem);
323
- }
324
-
325
- .popover--top-left.popover--open,
326
- .popover--top-left[data-state="open"] {
327
- transform: translateY(0);
345
+ transform: translate(0, calc(-1 * var(--popover-offset) - var(--popover-motion)));
328
346
  }
329
347
 
330
348
  /* ---------------------------------------------------------
@@ -333,8 +351,8 @@
333
351
 
334
352
  .popover__arrow {
335
353
  position: absolute;
336
- width: var(--space-3);
337
- height: var(--space-3);
354
+ width: var(--popover-arrow-size);
355
+ height: var(--popover-arrow-size);
338
356
 
339
357
  background-color: inherit;
340
358
  border: inherit;
@@ -344,20 +362,40 @@
344
362
  transform: rotate(45deg);
345
363
  }
346
364
 
347
- .popover--bottom .popover__arrow,
348
- .popover--bottom-right .popover__arrow,
365
+ .popover--bottom .popover__arrow {
366
+ bottom: 100%;
367
+ left: 50%;
368
+ transform: translate(-50%, 50%) rotate(45deg);
369
+ }
370
+
349
371
  .popover--bottom-left .popover__arrow {
350
372
  bottom: 100%;
351
- left: var(--space-6);
352
- transform: translateY(50%) rotate(45deg);
373
+ left: var(--popover-arrow-inset);
374
+ transform: translate(0, 50%) rotate(45deg);
375
+ }
376
+
377
+ .popover--bottom-right .popover__arrow {
378
+ bottom: 100%;
379
+ right: var(--popover-arrow-inset);
380
+ transform: translate(0, 50%) rotate(45deg);
381
+ }
382
+
383
+ .popover--top .popover__arrow {
384
+ top: 100%;
385
+ left: 50%;
386
+ transform: translate(-50%, -50%) rotate(45deg);
353
387
  }
354
388
 
355
- .popover--top .popover__arrow,
356
- .popover--top-right .popover__arrow,
357
389
  .popover--top-left .popover__arrow {
358
390
  top: 100%;
359
- left: var(--space-6);
360
- transform: translateY(-50%) rotate(45deg);
391
+ left: var(--popover-arrow-inset);
392
+ transform: translate(0, -50%) rotate(45deg);
393
+ }
394
+
395
+ .popover--top-right .popover__arrow {
396
+ top: 100%;
397
+ right: var(--popover-arrow-inset);
398
+ transform: translate(0, -50%) rotate(45deg);
361
399
  }
362
400
 
363
401
  .popover--left .popover__arrow {
@@ -372,6 +410,10 @@
372
410
  transform: translate(-50%, -50%) rotate(45deg);
373
411
  }
374
412
 
413
+ .popover--no-arrow .popover__arrow {
414
+ display: none;
415
+ }
416
+
375
417
  /* ---------------------------------------------------------
376
418
  11. POPOVER LAYOUT
377
419
  --------------------------------------------------------- */